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

一、导包

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

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.8</version>
        </dependency>

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

1、以RequestParam接收

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

@Autowired
private AccomodationService accomodationService;

@RequestMapping(value = "/update")
@ResponseBody
public String updateAttr(@RequestParam ("id") int id) {
    int res=accomodationService.deleteData(id);
    return "success";
}

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

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

@Autowired
private AccomodationService accomodationService;

    @RequestMapping(value = "/add")
    @ResponseBody
    public String addObj(@RequestBody Accomodation accomodation) {
        this.accomodationService.insert(accomodation);
        return "success";
    }

1、以Map接收

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

@Autowired
private AccomodationService accomodationService;

@RequestMapping(value = "/update")
@ResponseBody
public String updateAttr(@RequestBody Map<String, String> map) {
    if(map.containsKey("id"){
        Integer id = Integer.parseInt(map.get("id"));
    }
    if(map.containsKey("name"){
        String objname = map.get("name").toString();
    }
    // 操作 ...
    return "success";
}

4、以List接收

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

@Autowired
private AccomodationService accomodationService;

@RequestMapping(value = "/update")
@ResponseBody
public String updateAttr(@RequestBody List<Accomodation> list) {
    for(Accomodation accomodation:list){
        System.out.println(accomodation.toString());
    }
    return "success";
}

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

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

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

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

$.ajax({
                    type: "post",
                    url: "", 

                    contentType:'application/json', //改为json的编码

                    data: JSON.stringify(data.field), //传递时把json对象,变成json字符串
                    dataType: "json", //处理返回的json数据
                    success: function(data){
                         JSON.parse(data) //把后端传递的json字符串转为json对象
                    }
                });

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

题外话:

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

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

@RequestMapping("/postList")
    @ResponseBody
    public User postList(User user){
        System.out.println(user);
        return user;
    
    }

或者在类上面加 @RestController

@RestController
public class Controller {
    @RequestMapping("/postList")
    public User postList(User user){
        System.out.println(user);
        return user;
    }
}

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

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我认不到你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值