springmvc 400错误

前后端交互数据的时候,经常需要前端把数据提交给后端,前端一般就用ajax提交数据,就像下面这样:

1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
type: "post",
url: "pos_url.do",
contentType: "application/json",
data: JSON.stringify(params),
success: function (resp) {
xxxx;
},
error: function (resp) {
xxxx;
}
});

然后后端采用spring的代码如下:

1
2
3
4
5
@RequestMapping(value = "post_url", method = RequestMethod.POST)
@ResponseBody
public String postURL(@RequestBody JsonParam[] params) {

}

然后就是JsonParam这个类的定义:

1
2
3
4
5
public class JsonParam implements Serializable {

private String name;

private String value;

这样的话是可以从后端接受参数的,但是后来觉得这个JsonParam定义的不是很好,所以就把name改成了key,结果就报错了400 bad request,不知道为啥,连请求都报错了,更别说参数的接收和解析了,网上查资料,找到一个答案提示了我:

Verify the following things:
Whether the name of JSON matches the User class’s field name.
Also check whether JSON value is supported by the corresponding field name datatype in User class.
Do try it, I have faced the same issue numerous times.

然后我才明白,之前我自定义的Json类的两个属性就是name,value,然后改成key,value就报错了,所以错误的根源应该就是前端传过来的数据是name=xxx,value=xxx的数据格式,然后后端想按key=xxx,value=xxx这样来接收解析,然后就报400 bad request这个错误了,如果直接使用request来接收应该就没有这个问题了,但是参数和参数的值就得自己解析了.

具体的详细策略可以看spring源码,大概就是需要实现一些转化器来实现http-->bean之间的互转