源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

springMvc注解之@ResponseBody和@RequestBody详解

  • 时间:2021-06-18 20:22 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:springMvc注解之@ResponseBody和@RequestBody详解
[b]简介[/b] springmvc对json的前后台传输做了很好封装,避免了重复编码的过程,下面来看看常用的@ResponseBody和@RequestBody注解 [b]添加依赖[/b] springmvc对json的处理依赖jackson
<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-core-asl</artifactId>
  <version>1.9.11</version>
</dependency>
<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-mapper-asl</artifactId>
  <version>1.9.11</version>
</dependency>
[b]xml配置[/b]
<mvc:annotation-driven />//不要忘了命名空间配置
[b]@ResponseBody[/b] 如果传输的是单层json对象,我们后台可以直接用 @RequestParam接收
$.ajax({
  type : "post",
  dataType : "json",
  url : "/testRequestBody",
  data:{
    name:"韦德",
    age:35
  },
  success : function(result) {
  }
});
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestParam Map<String, Object> map) {
 System.out.println(map);// {name=韦德, age=35}
 return "index";
}
如果传输的是多层嵌套json对象,这个时候会就会出现数据丢失问题 @ResponseBody很好的解决了这个问题,它会把前台传输过来的json转化为后台对应的对象
$.ajax({
  type : "post",
  dataType : "json",
  url : "/testRequestBody",
  contentType:"application/json",  
  data:JSON.stringify({
    name:"韦德",
    win:[2006,2012,2013],
    age:35
  }),
  success : function(result) {
  }
});

@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody Map<String, Object> map) {
 System.out.println(map);//{name=韦德, win=[2006, 2012, 2013], age=35}
 return "index";
}

需要注意的是前台需要指定contentType为"application/json" 同时要把json对象转化为String,否则后台不能识别 [b]@ResponseBody[/b] ajax请求返回json格式,往常我们可以这样做
private void writeJson(HttpServletResponse response, Object object) {
 String json = JSON.toJSONString(object);
 response.setCharacterEncoding("UTF-8");
 response.setContentType("application/json; charset=utf-8");
 PrintWriter out = null;
 try {
  out = response.getWriter();
  out.write(json);
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  if (out != null) {
   out.close();
  }
 }
}

这个时候 @ResponseBody就派上用场了,只需要一个注解,全部搞定
$.ajax({
  type : "post",
  dataType : "json",
  url : "/testResponseBody",
  success : function(result) {
    console.info(result);
  }
});

@RequestMapping("/testResponseBody")
@ResponseBody
public Map<String, Object> testRequestBody() {
 Map<String, Object> result = new HashMap<String, Object>();
 result.put("name", "韦德");
 result.put("age", 35);
 return result;
}

前台console输出
{
  "age": 35,
  "name": "韦德"
}
[b]总结[/b] 在网上看到很不错的流程图,作为总结吧 [img]http://files.jb51.net/file_images/article/201705/201752491140630.png?201742491155[/img] 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部