问题
遇到这样一个错误,代码看起来没有问题,但在调用时提示 400
错误:
接口代码如下:
@GetMapping("/t12")
public void test12(@RequestParam Integer i){
System.out.println(i);
}
解决
理论
HTTP 状态码 400 主要有两种原因:
bad request
意思是 “错误的请求”;invalid hostname
意思是 “不存在的域名”。
400 Bad Request
是由于明显的客户端错误(例如格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。
解决
在这个极其简单的 DEMO 中似乎没有可出错的地方,我们只是接收了一个参数后把它输出。因此在此例中,问题只能是在传参上。
现在来看下入参,我们用 Integer 来接收入参(Integer 的取值范围为 -2147483648
至 2147483647
),而 POSTMAN 的传参为 111111111111111111
,显然超出了 Integer 的取值范围。
在 POSTMAN 中把入参修改为 111 后,功能正常:
因此,当我们用 Integer 接收入参时,如果传参超出了 Integer 的取值范围,那么就会返回 400
错误。
拓展
实际上这种问题可总结为参数类型错误。 例如仍然用此案例,我们把传参改成一个字符串,同样会出现 400 错误:
总结
HTTP 请求中的 400 bad request
错误总结。