错误400-The request sent by the client was syntactically incorrect
错误400-The request sent by the client was syntactically incorrect
总结:
因为SpringMVC控制层碰到了参数无法解析的错误,或者说请求数据与controller处理方法中的参数不匹配造成的。
解决方法:
检查前台传入后台的参数和后台Controller层方法中的参数个数、类型是否匹配、是否存在参数为空的情况。
下面是两个例子:
简单的说:传递的参数类型为int,而提交时该参数为空,也会报上述错误。如果是Integer 就不会报错。知道了是这原因就很好解决了
============
The request sent by the client was syntactically incorrect问题解决
问题
在Spring MVC应用中,在controller层经常可以看见报这个错误“The request sent by the client was syntactically incorrect”,后台一般不会打印错误消息,而是直接返回给前端400错误。这是为什么呢?
分析
这大多是因为Spring控制层碰到了参数无法解析的错误,或者说请求数据与controller处理方法中的参数不匹配造成。例如,下面这个例子通过AJAX PUT一个json对象到后台,携带数据JSON.stringify(params)。
var jsondata = {
name: json,
age: 20
};
var param = jsondata;
后台处理如下:
@RequestMapping(method = RequestMethod.PUT, value="/{personName}/update") public @ResponseBody ActionResponse<String> update(HttpServletRequest req, @PathVariable String department, @PathVariable String personName, @RequestBody Map<String, String> requestBodyParams){ String depolymentModel = requestBodyParams.get("personObject"); //... }
这个时候就会报“The request sent by the client was syntactically incorrect”了,因为AJAX PUT的数据就是一个对象,没有键值对,在将RequestBody参数映射到Map型变量 requestBodyParams时,因为没有KEY,就报错了。
改正
有两种方法:
1、修改AJAX PUT数据类型,使用对象类型,形成KEY:VALUE结构,这样使用上面的后台就可以解析了。
var params = {
personObject: json
};
@RequestMapping(method = RequestMethod.PUT, value="/{personName}/update") public @ResponseBody ActionResponse<String> update(HttpServletRequest req, @PathVariable String deparment, @PathVariable String personName, @RequestBody String requestBodyParams){ String personObject = requestBodyParams; //... return result; }
后记
以后碰到这条错误信息时,首先应检查从客户端提交的数据是否与Controller 处理方法接收的参数类型一致,换句话说,POST的数据结构类型应和接收时进行类型匹配自动转换的数据类型要一致。