SpringMVC Json对象与java对象互转
SpringMVC原生方式依赖的是jackson/gson,使用这两种方式,只需要导入jar包即可。如果使用其他方式现Json与对象之间自动互转,需要在xml中配置转化器。
-
接收Json字符串,自动转化为java对象
-
返回java对象,自动转化为Json字符串
-
fastjson方式实现
接收Json字符串,自动转化为java对象
以jackson为例,导入jar包
jackson-annotations-2.5.0.jar jackson-core-2.5.2.jar jackson-databind-2.5.2.jar
前端传入一个json数据
<input type="button" value="提交JSON数据" onclick="fun1();"> <script type="text/javascript"> function fun1(){ $.ajax({ type: 'POST', url: "fun5", contentType: "application/json",//如果想以json格式把数据提交到后台的话,这个必须有,否则只会当做表单提交 data: JSON.stringify({"id":66,"name":"lisi","address":"sz"}),//JSON.stringify()必须有,否则只会当做表单的格式提交 dataType: "json",//期待返回的数据类型 success: function(data){ alert("success:"+data); }, error:function(data){ alert("error"+data); } }); } </script>
通过control中的方法接收
/** * 接收客户端提交的json数据 * 注意: * 1.客户端提交的json数据必须是post方式提交 * 2.在接收数据的形参前我们需要添加@RequestBody */ @RequestMapping("/fun5") @ResponseBody public String fun5(@RequestBody User user){ System.out.println(user); return "ok"; }
前台页面
控制台输出
返回java对象,自动转化为Json字符串
返回各种类型的java对象,自动转化为json字符串。
方法举例
/**
* 返回一个JSONObject
* @return
*/
@RequestMapping("/fun1")
@ResponseBody
public User fun1(){
return new User(12,"张三","宝安");
}
/**
* 返回一个JSONArray
* @return
*/
@RequestMapping("/fun2")
@ResponseBody
public List<String> fun2(){
return Arrays.asList("张三","李四","王五");
}
/**
* 数组的类型是自定义对象
* @return
*/
@RequestMapping("/fun3")
@ResponseBody
public List<User> fun3(){
return Arrays.asList(new User(12,"张三","宝安"),new User(13,"张三1","宝安1"),new User(14,"张三2","宝安2"));
}
/**
* 数组的类型是自定义对象
* @return
*/
@RequestMapping("/fun4")
@ResponseBody
public Map<String, Object> fun4(){
Map<String, Object> map = new HashMap<>();
map.put("total", 100);
map.put("rows", Arrays.asList(new User(12,"张三","宝安"),new User(13,"张三1","宝安1"),new User(14,"张三2","宝安2")));
return map;
}
页面输出
返回对象自动转json
返回list自动转json
返回list自动转json
返回Map<String, Object>自动转json
总结:从json对象转java对象,导入相关jar包并在形参类型前加注解 @RequestBody
返回java对象自动转json对象,导入相关jar包在方法上注解 @ResponseBody
项目打包 提取码:7yx1
环境:eclipse
fastjson方式实现
导入jar包
fastjson-1.2.47.jar
在springmvc.xml中添加转换器
<!-- 开启SpringMVC注解 -->
<mvc:annotation-driven >
<!-- 添加fastjson的转换器 -->
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
其余操作与jactson方式实现一样。
项目打包 提取码:8ksg
环境:eclipse