HTTP400错误:bad request

郎家岭伯爵 2023年10月19日 315次浏览

问题

遇到这样一个错误,代码看起来没有问题,但在调用时提示 400 错误:

接口代码如下:

@GetMapping("/t12")
public void test12(@RequestParam Integer i){
    System.out.println(i);
}

解决

理论

HTTP 状态码 400 主要有两种原因:

  1. bad request 意思是 “错误的请求”;
  2. invalid hostname 意思是 “不存在的域名”。

400 Bad Request 是由于明显的客户端错误(例如格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。

解决

在这个极其简单的 DEMO 中似乎没有可出错的地方,我们只是接收了一个参数后把它输出。因此在此例中,问题只能是在传参上。

现在来看下入参,我们用 Integer 来接收入参(Integer 的取值范围为 -21474836482147483647),而 POSTMAN 的传参为 111111111111111111,显然超出了 Integer 的取值范围。

在 POSTMAN 中把入参修改为 111 后,功能正常:

因此,当我们用 Integer 接收入参时,如果传参超出了 Integer 的取值范围,那么就会返回 400 错误。

拓展

实际上这种问题可总结为参数类型错误。 例如仍然用此案例,我们把传参改成一个字符串,同样会出现 400 错误:

总结

HTTP 请求中的 400 bad request 错误总结。

捐赠页面示例