springMVC接收JSON格式数据

SpringMVC提供了一个@RequestBody,它是用来处理前台定义发来的数据Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;

因此对于前台发送的数据类型必须是“application/json”格式,否则会报400错误;而且需要用post方式发送请求,将json对象转成字符串传输(否则400)(ajax代码如下):

 

$.ajax({
    url:'/test?param=haha',
    // contentType:'application/json;charset=UTF-8',
    dataType:'json',
    contentType:'application/json',
    type:'POST',
    data:JSON.stringify({"key1":"测试1","key2":"测试2"}),
    success:function (data) {
        console.log("aa"+data);
        alert(data);
    }
})

有四种接收方式:

1.对于后台的接受需要使用springMVC的注解@RequestBody(使用Map集合接收):

@RequestMapping(value = "/test")
@ResponseBody
public Object jsonTest(@RequestBody Map<String,String> map, String param){
     return map;
}

 2. 可以直接使用一个字符串参数接受整个json对象然后再进行处理

@RequestMapping(value = "/test")
@ResponseBody
public Object jsonTest(@RequestBody String json, String param){
     return JSON.parse(json);  //把字符串转成json对象
}

 

3.包装成对象接收(如果是[{"key1":"value1"},{...}],可以使用注解+List<对于类>接收)

@RequestMapping(value = "/test")
@ResponseBody
public TestObj jsonTest(@RequestBody TestObj obj){
  System.out.println(obj.getKey1()+",param:");
  return obj;
}
$.ajax({
    url:'/test',
    // contentType:'application/json;charset=UTF-8',
    dataType:'json',
    contentType:'application/json',
    type:'POST',
    data:JSON.stringify([{"key1":"测试1","key2":"测试2"},{"key1":"测试1","key2":"测试2"}]),
    success:function (data) {
        console.log("aa"+data);
        alert(data);
    }
})
 

@RequestMapping(value = "/test")
@ResponseBody
public List<TestObj> jsonTest(@RequestBody List<TestObj> obj) {
    System.out.println(obj.get(0).getKey1() + ",param:");
    System.out.println(obj.getClass());
    return obj;
}

 

 

TestObj对象类:

public class TestObj{
    String key1;
    String key2;
   
    public String getKey1(){
        return key1;
    }
    public void setKey1(String key1){
        this.key1=key1;
    }
    public String getKey2(){
        return key2;
    }
    public void setKey2(String key2){
        this.key2=key2;
    }
}
 

 

 

4.每个键对应接收:

网上资料说可以使用以下方式接收,但是每次都是报400错误(大佬帮忙解答一下):

public String jsonTest(@RequestBody String key1,@RequestBody String key2)

 

注意:

1、在使用AJAX传递JSON数据的时候要将contentType的类型设置为“application/json”,否则的话会提示415错误

2、传递的data需要时JSON类型的字符串而不是对象

3、controller在接收数据时需要在参数前加上@RequestBody注解,否则会报400错误

4、JSON对象的属性必须和实体类属性保持一致,不可以存在实体类中没有的属性,否则的话会提示400错误

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值