记录一次Status Code:400 Bad Request解决方案及打印错误原因

简介 下午在调页面的时候,提交一直400.前端修改了js代码。各种查询,都说是因为参数对应不上。错误如下图:提交信息:参数不一致?一个一个对应。没问题啊。参数类型不一致?不好判断。但是可以使用spring mvc的:@ResponseBody@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(HttpMessageNotReadab

下午在调页面的时候,提交一直400.前端修改了js代码。各种查询,都说是因为参数对应不上。错误如下图:

c63221c5633f0a4111499d76655ead52.png

提交信息:

55bcf263bac9bc9f4a6f5c5aac81c6b3.png

参数不一致?一个一个对应。没问题啊。

参数类型不一致?不好判断。但是可以使用spring mvc的


@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class)
public String messageNotReadable(HttpMessageNotReadableException exception, HttpServletResponse response){
    log.error("请求参数不匹配。", exception);
    return "";
}

打印出的:

4adaa29b23f1bd9fb5ac08cd1b9e007e.png

根据错误提示,说在salaryways对象中positionType这个对象是数组类型。不对啊。对象中是Int类型。那有可能是前端js处理的时候,传递的数组。

再次仔细查看提交数据:1a799c8f4c67fc67f07ecfcad31927ea.png

我艹。确实是数组。修改后,测试ok.


网上其他遇到400解决方案:

请求成功示例

下面这张图展现的就是请求成功的情形:

错误原因

在我没有注意到“关键哦~”的关键点时,我还纳闷呢,明明两次的请求都是一样的,为什么一个成功,一个就失败了呢?

哦,后来定位到传输参数异样时,才发现:原来是areaOrSchoolId 的参数没有传过去,而这个参数在服务端又是一个必需项。所以,当前端请求没有传递所必须的参数时,请求就报了 Bad Request 的错误了!

综上所述:

出现了 Status Code:Http 400 Bad Request  错误的一种原因就是:参数匹配。包括以下两方面:

  1. 请求时没有传递必须的参数;

  2. 传递的参数类型不匹配,比如areaOrSchoolId 需为  int型,若传到后台的是string型则也会出现类似的错误。

当然了,这只是400错误的一种表现形式。记录于此,给遇到同样问题的伙伴。





TopTop