当前位置:   article > 正文

SpringMVC获取前端传来的json数据的四种方法(前后端json交互总结)_springmvc获取json数据

springmvc获取json数据

一、导包

一定要有 Jackson 的jar包依赖,就算有了fastjson,也要有Jackson

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-databind</artifactId>
  4. <version>2.9.8</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.fasterxml.jackson.core</groupId>
  8. <artifactId>jackson-core</artifactId>
  9. <version>2.9.8</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.fasterxml.jackson.core</groupId>
  13. <artifactId>jackson-annotations</artifactId>
  14. <version>2.9.8</version>
  15. </dependency>

二、SpringMVC获取json数据方法(后端)

1、以RequestParam接收

前端传来的是json数据不多时:[id:id],可以直接用@RequestParam来获取值 

  1. @Autowired
  2. private AccomodationService accomodationService;
  3. @RequestMapping(value = "/update")
  4. @ResponseBody
  5. public String updateAttr(@RequestParam ("id") int id) {
  6. int res=accomodationService.deleteData(id);
  7. return "success";
  8. }

1、以实体类方式接收(推荐)

前端传来的是一个json对象时:{【id,name】},可以用实体类直接进行自动绑定

  1. @Autowired
  2. private AccomodationService accomodationService;
  3. @RequestMapping(value = "/add")
  4. @ResponseBody
  5. public String addObj(@RequestBody Accomodation accomodation) {
  6. this.accomodationService.insert(accomodation);
  7. return "success";
  8. }

1、以Map接收

前端传来的是一个json对象时:{【id,name】},可以用Map来获取

  1. @Autowired
  2. private AccomodationService accomodationService;
  3. @RequestMapping(value = "/update")
  4. @ResponseBody
  5. public String updateAttr(@RequestBody Map<String, String> map) {
  6. if(map.containsKey("id"){
  7. Integer id = Integer.parseInt(map.get("id"));
  8. }
  9. if(map.containsKey("name"){
  10. String objname = map.get("name").toString();
  11. }
  12. // 操作 ...
  13. return "success";
  14. }

4、以List接收

当前端传来这样一个json数组:[{id,name},{id,name},{id,name},...]时,用List<E>接收

  1. @Autowired
  2. private AccomodationService accomodationService;
  3. @RequestMapping(value = "/update")
  4. @ResponseBody
  5. public String updateAttr(@RequestBody List<Accomodation> list) {
  6. for(Accomodation accomodation:list){
  7. System.out.println(accomodation.toString());
  8. }
  9. return "success";
  10. }

三、用ajax向后台传json字符串(前端)

在 $.ajax 中添加 contentType:'application/json' ,让前后端传递的编码一致

JSON.stringify() 把 json 对象变成 json 字符串传给后端

ajax默认为 application/x-www-form-urlencoded; charset=UTF-8 ,要穿json数据就不能用默认值

  1. $.ajax({
  2. type: "post",
  3. url: "",
  4. contentType:'application/json', //改为json的编码
  5. data: JSON.stringify(data.field), //传递时把json对象,变成json字符串
  6. dataType: "json", //处理返回的json数据
  7. success: function(data){
  8. JSON.parse(data) //把后端传递的json字符串转为json对象
  9. }
  10. });

处理后端传递的json数据时用 JSON.parse() 把 json 字符串转为 json 对象 

题外话:

后端使用 SpringMVC 向前端传 json 时 必须有注解 @ResponseBody 

有了Jackson后可以直接传对象,输出时是json数据(里面的数据就是对象里面的值)

  1. @RequestMapping("/postList")
  2. @ResponseBody
  3. public User postList(User user){
  4. System.out.println(user);
  5. return user;
  6. }

或者在类上面加 @RestController

  1. @RestController
  2. public class Controller {
  3. @RequestMapping("/postList")
  4. public User postList(User user){
  5. System.out.println(user);
  6. return user;
  7. }
  8. }

参考文档:https://www.cnblogs.com/zzsuje/articles/10329948.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/509598
推荐阅读
相关标签
  

闽ICP备14008679号