错误400-The request sent by the client was syntactically incorrect

错误400-The request sent by the client was syntactically incorrect

 

总结:

因为SpringMVC控制层碰到了参数无法解析的错误,或者说请求数据与controller处理方法中的参数不匹配造成的。

 

解决方法:

检查前台传入后台的参数和后台Controller层方法中的参数个数、类型是否匹配、是否存在参数为空的情况。

 

下面是两个例子:

 

 springMVC中,某个页面提交时报400错误,如下图。
 
 
解决方法:
1.在网上找了一下,答案是通常遇到这个错误是因为前端jsp页面的控件名称和controller中接收的参数名称不一致。但仔细对比了一遍发现没有问题。很郁闷。
 
2.然后就反复的提交那个页面进行测试,发现了问题,因为我是将多个参数作为一个实体传至controller,发现某个文本框为空时,提交就会报错,于是去实体中查看该文本框对应的参数属性,发现与其他参数不同,定义的为int类型。于是就懂了。

简单的说:传递的参数类型为int,而提交时该参数为空,也会报上述错误。如果是Integer 就不会报错。知道了是这原因就很好解决了

============

The request sent by the client was syntactically incorrect问题解决

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hongweigg/article/details/79535845

问题

   在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
};

2、修改后台Controller的处理接收参数类型为String,直接接收RequestBody数据:

    @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的数据结构类型应和接收时进行类型匹配自动转换的数据类型要一致。

posted @ 2018-12-07 14:11  戈博折刀  阅读(1204)  评论(0编辑  收藏  举报