- 浏览: 932871 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (251)
- WebService (17)
- IBatis (22)
- Hibernate (1)
- SpringMVC - 基础篇 (32)
- Spring (15)
- Java (11)
- JVM及调优 - 基础篇 (4)
- 集群 (14)
- 数据库 (17)
- WebSphere (5)
- 多线程 (4)
- 集合、容器 (2)
- DB Pool (1)
- Power Designer (5)
- Maven基础 (5)
- JS (14)
- WEB 前端 (5)
- 实用小工具 (17)
- 社会、人 (2)
- 乱七八糟 (18)
- ASM&CGLIB - 基础篇 (12)
- 缓存 (1)
- 性能 (1)
- 设计之殇 (1)
- 分布式事务 (1)
- 单点登录 (11)
- 分布式 Session (4)
- Memcached - 基础篇 (6)
最新评论
-
一笑_奈何:
楼主写的还真行不错。
扫盲贴 - J2EE集群之JNDI集群实现 -
xuezhongyu01:
博主写的很详细,但最后还是没明白,最后调用BasicDataS ...
Spring中的destroy-method方法 -
Mr梁:
commons-fileupload.jar commons- ...
SpringMVC 中文件上传 MultipartResolver -
Eywa:
总结的很不错
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法 -
TryRelax:
fastjson 比 jackson 好用吧?
Spring MVC Jackson DateFormat
本示例基于前面几篇文章的代码。
一、JSON-lib框架,转换JSON
1、首先要去官方下载json-lib工具包
本示例中使用的是v2.3;json-lib还需要以下依赖包:
jakarta commons-lang 2.5
jakarta commons-beanutils 1.8.0
jakarta commons-collections 3.2.1
jakarta commons-logging 1.1.1
ezmorph 1.0.6
官方网址:http://json-lib.sourceforge.net/
然后在工程中添加如下jar包:
如果你还不了解JSON是什么?那么你应该可以看看http://www.json.org/json-zh.html
2、 要转换的JavaBean的代码如下:
package com.wy.pojo;
import java.io.Serializable;
/**
* User对象必须实现serializable接口,因为放在session中的数据必须是可序列化的。
* 否则会出现错误 setAttribute: Non-serializable attribute...
* @author Administrator
* @version 2011-10-6
*/
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
private int age;
private String sex;
private String birthday;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.username +"#"+ this.password +"#"+ this.age +"#"+ this.sex +"#"+ this.birthday;
}
}
3、 新建JsonlibTest测试类,基本代码如下:
package com.wy.junittest; import org.junit.Before; import org.junit.Test; import com.wy.controller.annotation.EntryOrJsonController; public class JsonlibTest { @Before public void setUp() throws Exception { } //@Test public void testEntry2Json() { new EntryOrJsonController().entry2Json(); } //@Test public void testList2Json() { new EntryOrJsonController().list2Json(); } //@Test public void testMap2Json() { new EntryOrJsonController().map2Json(); } //@Test public void testJson2Entry() { new EntryOrJsonController().json2Entry(); } //@Test public void testJson2MorphDynaBean() { new EntryOrJsonController().json2MorphDynaBean(); } //@Test public void testJson2Array() { new EntryOrJsonController().json2Array(); } //@Test public void testJson2List() { new EntryOrJsonController().json2List(); } //@Test public void testJson2Collection() { new EntryOrJsonController().json2Collection(); } @Test public void testJson2Map() { new EntryOrJsonController().json2Map(); } }
JSON中重要的对象:JSONObject、JSONArray、JSONSerializer,下面也是围绕着这几个对象来说明问题。
JSONObject是将Java对象转换成一个json的Object形式。
JSONArray是将一个Java对象转换成json的Array格式。
JSONSerializer也一样可以完成将Java对象转换成JSON。
JSONObject、JSONArray、JSONSerializer不仅可以将Java对象转换成JSON,还可以将JSON转换成Java对象。
Java对象序列化成JSON对象
1、 将JavaObject转换吃JSON字符串
/**
* 1、 将JavaObject转换成JSON字符串
* JSONObject是将Java对象转换成一个json的Object形式,
* JSONArray是将一个Java对象转换成json的Array格式。
* JSONSerializer是将Java对象转换成一个json。
*
* JSONArray、JSONObject、JSONSerializer可以将Java对象转换成JSON,也可将JSON字符串转换成Java对象。
*/
@SuppressWarnings("static-access")
public void entry2Json(){
user = new User();
user.setUsername("wy");
user.setPassword("321");
user.setAge(23);
user.setSex("man");
user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date()));
log.info("==============Java Bean >>> JSON Object==================");
JSONArray ja = jsonArray.fromObject(user);
JSONObject jo = jsonObject.fromObject(user);
JSON jsja = jsonSerializer.toJSON(user);
log.info("JSONArray: \r\n"+ja+"\r\n"+"JSONObject: \r\n"+jo+"\r\n"+"JSONSerializer: \r\n"+jsja);
}
2、 将JavaList集合转换吃JSON字符串
/**
* 2.将JavaList集合转换吃JSON字符串
* 如果你是转换List集合,一定得用JSONArray或是JSONSrializer提供的序列化方法。
* 如果你用JSONObject.fromObject方法转换List会出现异常,
* 通常使用JSONSrializer这个JSON序列化的方法,它会自动识别你传递的对象的类型,然后转换成相应的JSON字符串。
*/
@SuppressWarnings("static-access")
public void list2Json(){
List<User> userList = new ArrayList<User>();
for(int i=0;i<3;i++){
user = new User();
user.setUsername("wy"+i);
user.setPassword("321"+i);
user.setAge(23+i);
user.setSex("man"+i);
user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date())+" "+i);
userList.add(user);
}
log.info("==============Java List >>> JSON Object==================");
JSONArray ja = jsonArray.fromObject(userList);
//JSONObject jo = jsonObject.fromObject(userList); +"JSONObject: \r\n"+jo+"\r\n"
JSON jsja = jsonSerializer.toJSON(userList);
log.info("JSONArray: \r\n"+ja+"\r\n"+"JSONSerializer: \r\n"+jsja);
}
3、 将Map集合转换成JSON对象
/** * 3.将Map集合转换成JSON对象 * */ @SuppressWarnings("static-access") public void map2Json(){ user = new User(); user.setUsername("wy"); user.setPassword("321"); user.setAge(23); user.setSex("man"); user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date())); Map<String, Object> map = new HashMap<String, Object>(); map.put("bool", Boolean.TRUE); map.put("int", 321); map.put("Long", 321.01); map.put("Str", "wy"); map.put("array", new String[]{"wy", "321"}); map.put("func", "function(i){ return this.arr[i]; }"); map.put("user", user); log.info("==============Java Map >>> JSON Object=================="); JSONArray ja = jsonArray.fromObject(map); JSONObject jo = jsonObject.fromObject(map); JSON jsja = jsonSerializer.toJSON(map); log.info("JSONArray: \r\n"+ja+"\r\n"+"JSONObject: \r\n"+jo+"\r\n"+"JSONSerializer: \r\n"+jsja); }
JSON对象反序列化成Java对象
1、 将json字符串转成Java对
/** * 4.JSON对象反序列化成Java对象 * */ public void json2Entry(){ log.info("==============JSON Object String >>> Java Bean =================="); jsonObject = JSONObject.fromObject(json); User joUser = (User)JSONObject.toBean(jsonObject, User.class); log.info("JSONObject: \r\n"+joUser.toString()); }
2、 将json字符串转换成动态Java对象(MorphDynaBean)
/** * 5.将json字符串转换成动态Java对象(MorphDynaBean) * 转换后的对象Object是一个MorphDynaBean的动态JavaBean,通过PropertyUtils可以获得指定的属性的值。 */ public void json2MorphDynaBean(){ log.info("==============JSON Object String >>> Java MorphDynaBean =================="); JSON j = JSONSerializer.toJSON(json); Object obj = JSONSerializer.toJava(j);//MorphDynaBean String userName = null; try { userName = PropertyUtils.getProperty(obj, "username")+""; } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } log.info("JSONSerializer: \r\n"+obj.toString()+" "+userName); }
3、 将json字符串转成Java的Array数组
/** * 6. 将json字符串转成Java的Array数组 * */ public void json2Array(){ log.info("==============JSON String >>> Java Array =================="); json = "[" + json + "]"; jsonArray = JSONArray.fromObject(json); Object[] obj = jsonArray.toArray(); User[] user = (User[])JSONArray.toArray(jsonArray, User.class); log.info("JSONArray: \r\n"+obj+" "+obj[0]+"\r\n"+user+" "+user[0]); }
4、 将JSON字符串转成Java的List集合
/** * 7.将JSON字符串转成Java的List集合 */ public void json2List(){ json = "[" + json + "]"; log.info("==============JSON Array String >>> Java List =================="); jsonArray = JSONArray.fromObject(json); List<User> user = jsonArray.toList(jsonArray, User.class); log.info("JSONArray: \r\n"+user.get(0).toString()); }
5、 将json字符串转换成Collection接口
/** * 8.将json字符串转换成Collection接口 */ public void json2Collection(){ json = "[" + json + "]"; log.info("==============JSON Array String >>> Java Collection =================="); jsonArray = JSONArray.fromObject(json); Collection<User> user = jsonArray.toCollection(jsonArray, User.class); Object[] obj = user.toArray(); log.info("JSONArray: \r\n"+user+" "+obj); }
6、 将json字符串转换成Map集合
/** * 9.将json字符串转换成Map集合 */ public void json2Map(){ log.info("==============JSON String >>> Java Map =================="); jsonObject = JSONObject.fromObject(json); Map<String, Class<?>> clazzMap = new HashMap<String, Class<?>>(); clazzMap.put("A", User.class); Map<String, ?> mapBean = (Map) JSONObject.toBean(jsonObject, Map.class, clazzMap); log.info("JSONObject "+ mapBean); Set<String> set = mapBean.keySet(); Iterator<String> iter = set.iterator(); while (iter.hasNext()) { String key = iter.next(); log.info("JSONObject "+ key + ":" + mapBean.get(key).toString()); } }
将JSON返回到页面
1、HttpServletResponse
/** * 10. 将JSON返回到页面 * @param response */ public String entry2JSON(){ user = new User(); user.setUsername("wy"); user.setPassword("321"); user.setAge(23); user.setSex("man"); user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date())); log.info("==============Java Bean >>> JSON Object=================="); JSONArray ja = jsonArray.fromObject(user); JSONObject jo = jsonObject.fromObject(user); JSON jsja = jsonSerializer.toJSON(user); return jo.toString(); } /** * 将JSON返回到页面 * @param response */ /*@RequestMapping(value="/returnJson", method=RequestMethod.GET) public void commonReturnType(HttpServletResponse response){ try { PrintWriter out = response.getWriter(); out.print(new EntryOrJsonController().entry2JSON()); out.flush(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }*/
2、PrintWriter out
/** * 将JSON返回到页面 * 默认策略生产viewName * @param out */ /*@RequestMapping(value="/returnJson", method=RequestMethod.POST) public void commonReturnType(PrintWriter out){//其实也是从HttpServletResponse 通过getWriter()得到out out.print(new EntryOrJsonController().entry2JSON()); out.flush(); out.close(); }*/
3、ModelAndView
@RequestMapping(value="/returnJson", method=RequestMethod.GET) public ModelAndView commonReturnType(){ ModelAndView mav = new ModelAndView(); mav.addObject("json", new EntryOrJsonController().entry2JSON()); mav.setViewName("returnJson"); return mav; }
4、@ResponseBody
/** * 注解 * 将JSON返回到页面 * 默认策略生产viewName * @return */ @ResponseBody @RequestMapping(value="/returnJson", method=RequestMethod.POST) public String commonReturnTypeAnno(){ String jsonAnnotation = new EntryOrJsonController().entry2JSON(); return jsonAnnotation; }
视图层接受JSON
returnJson.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>JSON输出到页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> JSON输出到页面. <br/> <c:if test="${json != null}"> 通过GET方式请求并以ModelAndView返回的JSON: ${json} </c:if> <c:if test="${jsonAnnotation != null}"> 完全基于注解返回的JSON: ${jsonAnnotation} </c:if> <form action="<%=path%>/returnJson.do" method="post"> <input type="submit" value="提交" /> </form> </body> </html>
附件中是完整的Controller。
- EntryOrJsonController.zip (2.7 KB)
- 下载次数: 109
发表评论
-
SpringMVC中内容协商【统一资源多种展现json xml html】
2013-09-12 15:58 3426在我们实际的开发中,往往需要SpringMVC ... -
Spring为某个属性注入值或为某个方法的返回值
2013-08-26 16:02 1490项目中用到需要初始化一些数据,Spring提供了filed的 ... -
SpringMVC 基础知识点小结
2013-08-23 15:26 2269参照:http://zachary-g ... -
使用SpringMVC Restful 开发思考
2013-03-18 14:23 1279一、rest思想 此部分 ... -
Spring MVC Jackson DateFormat
2012-10-14 15:59 2233使用Spring MVC 里的Jackson返回JSON时,遇 ... -
SpringMVC 中文件上传 MultipartResolver
2011-12-17 17:44 55171基于前面文章的基础上。 一、准备 需要的jar ... -
SpringMVC 异常处理初探
2011-12-12 12:18 8240Web应用中对于异常的处理方式与其他形式的应用并没有太大的不同 ... -
SpringMVC 使用JSR-303进行校验 @Valid
2011-12-11 18:04 31562一、准备校验时使用的JAR 说明: ... -
SringMVC 注解标记备忘录
2011-12-10 22:42 2135Spring MVC注解开发中常用标签,如下表: ... -
SpringMVC拦截器简单使用
2011-12-10 22:17 93573基于上一篇文章的基础上 一、拦截器的配置 1、 ... -
SpringMVC生成JSON(三)
2011-12-10 01:16 20641基于上一篇文章的代码基础上 一、准备工作 1、 下载依赖库 ... -
SpringMVC生成JSON(二)
2011-12-06 21:24 8278基于上一篇文章的代码基础上 开始Jackson之旅。 一、准 ... -
Spring MVC处理重定向的传参
2011-12-03 21:35 6542一、Spring MVC是如何处理重定向的传参? 现提供一种 ... -
Spring MVC3.0的RESTFul方式的访问
2011-12-03 20:59 1633上一篇以简单介绍了 ... -
SpringMVC之用注解控制器
2011-12-03 19:53 2529在传统的Spring MVC开发方法中,必须在Bean配置 ... -
SpringMVC例子代码小汇总
2011-11-20 11:18 1906一、结构 二、Jar版本及使用jar包 ... -
SpringMVC 拦截器实现分析
2011-11-20 00:10 5393一、Servlet Filter与Spring interce ... -
SpringMVC学习笔记(三) --- 映射处理器(续)
2011-10-07 21:46 1673<?xml version="1.0" ... -
SpringMVC学习笔记(二) --- 后端控制器之MultiActionController(一)
2011-10-07 21:07 2046创建处理多个请求的控制器 根据"每个请求一个 ... -
SpringMVC学习笔记(二) --- 后端控制器之CommandController、 FormController(三)
2011-10-07 16:09 2991另一种表单封装的参数的Controller是AbstractC ...
相关推荐
2. `jackson-core-2.4.2.jar`: Jackson核心库提供了基本的JSON解析和生成功能。它是其他Jackson模块(如databind和annotations)的基础,包含了流式API(JsonParser和JsonGenerator)以及数据绑定的基础结构。 3. `...
在描述中提到的文件"springmvc-json"可能包含了Spring MVC与JSON交互所需的一些依赖,如Jackson库的jar文件。Jackson库由多个组件组成,主要包括: 1. **Jackson-core**: 这是Jackson库的基础模块,提供了基本的...
总结来说,SpringMVC结合Jackson库为我们提供了一种简单有效的方式来生成JSON响应。通过使用`@RestController`、`@GetMapping`注解以及配置好Jackson依赖,我们可以轻松地将Java对象转化为客户端可以理解的JSON格式...
**Json**(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Web服务中,Json常用于传输数据,因其简洁的结构和高效的序列化与反序列化性能,被广泛应用于...
- `jackson-core-2.4.2.jar`:核心库,提供了JSON流API,用于低级别的JSON解析和生成,是Jackson的基础。 - `jackson-annotations-2.4.0.jar`:包含了一组注解,用于定制序列化和反序列化的行为,比如`@...
而JSON作为一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,成为数据传输的首选。本文将深入探讨如何在SpringMVC项目中集成并使用JSON库,以实现高效的数据交换。 首先,我们需要了解...
7. **Jackson配置**:Spring MVC允许我们通过`ObjectMapper`的配置来影响JSON的生成,比如设置日期格式、启用或禁用特定特性,或者注册自定义的模块。这可以通过`Jackson2ObjectMapperBuilder`或`WebMvcConfigurer`...
你可以在Controller方法中返回一个Java对象,SpringMVC会自动将其转换为JSON响应,或者接收客户端发送的JSON请求,并将其转换为Java对象。 例如,以下是一个简单的SpringMVC Controller示例,展示了如何利用Jackson...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Spring MVC提供了对JSON的支持,通过集成第三方库如Jackson,可以方便地实现对象到JSON的转换。 ...
在本案例中,"springMVC返回json数据需要的两个架包"指的是`jackson-mapper-asl-1.9.13.jar`和`jackson-core-asl-1.9.13.jar`。 1. Jackson库:这两个jar文件属于Jackson库的一部分,Jackson是Java中广泛使用的JSON...
Jackson核心库是Jackson框架的基础部分,提供了JSON解析和生成的基本功能。它包括了`JsonParser`和`JsonGenerator`接口,分别用于读取和写入JSON数据。此外,它还提供了`JsonNode`抽象类,用于表示JSON结构,以及一...
- 如果你的返回类型是自定义Java对象,那么Jackson会尝试根据对象的属性生成JSON。为此,对象的属性需要有公共getter和setter方法,并且属性名称应与JSON键匹配。 6. **日期格式化**: - 默认情况下,Jackson可能...
3. **JSON数据格式**:JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON格式通常用于前后端交互,因为它可以直接被JavaScript对象表示,减少了...
它包含了解析和生成JSON流的API,是其他Jackson模块(如databind和annotations)的依赖。 3. `jackson-annotations-2.8.7.jar`:这个模块提供了注解,用于增强Jackson库的功能。通过这些注解,开发者可以在Java类或...
要使SpringMVC能够与EasyUI的DataGrid交互,你需要确保Controller方法返回的是一个符合DataGrid预期的JSON结构。DataGrid通常期望JSON对象包含`total`(记录总数)、`rows`(数据数组)等字段。例如: ```java @...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Web服务中,JSON常用于服务器向客户端发送数据。SpringMVC支持JSON数据的序列化和反序列化,通过`@...
在前后端交互中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,它轻量级且易于人阅读和编写,同时也方便机器解析和生成。然而,当我们在使用SpringMVC和Ajax进行数据交互时,可能会遇到406错误,这...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。XML(Extensible Markup Language)则是一种更为结构化的数据表示方式,用于存储和传输数据。在...
此外,它还提供了基本的JSON节点类型,如ObjectNode、ArrayNode等,以及JsonParser和JsonGenerator,这两个类分别用于解析JSON输入和生成JSON输出。 `jackson-mapper-asl-1.9.11.jar`是Jackson的 ObjectMapper 实现...