今天做接口对接工作,对方传了6个文件流给到我这边,发现接口报如下错误:
{
"timestamp": "2019-03-09T02:00:44.224+0000",
"status": 500,
"error": "Internal Server Error",
"message": "No message available",
"path": "/aaa/bbbbb"
}
从提示中看,没有拿到传过来的消息,于是远程断点调试,发现确实在Controller层没有拿到请求参数:
@ResponseBody
@RequestMapping( value = "/bbbbb", method = RequestMethod.POST, produces = "text/html;charset=UTF-8" )
public String bbbbb( HttpServletRequest request ) {
String requestStr = request.getParameter( "request" );
requestStr为空,导致后面的解析出现空指针异常。
可以判断请求的request在传递到Controller层的时候就已经为空了,看来下对方的请求参数,2.15Mb大小,感觉参数有点大,于是将参数中的6个文件减小到4个,发现请求是正常的,初步定位为请求参数过大导致的问题。
上网查询了下springboot的配置请求参数大小的解决办法,大多是在application.properties中增加以下两行配置:
spring.http.multipart.max-file-size=50Mb
spring.http.multipart.max-request-size=10Mb
经测试无果,于是又多次改变配置的大小值,100Mb,1000Mb,甚至如下:
spring.http.multipart.max-file-size=-1
spring.http.multipart.max-request-size=-1
依然无果。于是查找资料尝试以下配置:
server.tomcat.max-http-post-size=20971520(20971520相当于20Mb,直接写成20Mb会报错)
测试成功。
后续又查找了springboot内置的tomcat默认请求大小,2Mb,也是巧了,这次请求多了一点点,才让我发现了这个问题。
至于
spring.http.multipart.max-file-size=-1
spring.http.multipart.max-request-size=-1
猜测可能是配置的发送请求吧,后续有机会再研究下。