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错误