我在生产和开发环境之间遇到了令人费解的行为。
我的Spring控制器如下(两个环境之间相同)
@RequestMapping(value = "/find")
@ResponseBody
public List<D> find(@RequestBody P params) throws Exception {
// omitted
}
Chrome在生产环境中完成请求后,浏览器会收到正确的响应:
但是,当Chrome在开发环境中完成请求时,Spring会显示警告(警告指向丢失的请求正文)
WARN [qtp543254421-52] AbstractHandlerExceptionResolver.java:197 -
Resolved
[org.springframework.http.converter.HttpMessageNotReadableException:
Required request body is missing: public java.util.List<D>
pl.kg.ut.postgres.controller.ReadPostgresController.find(P) throws java.lang.Exception]
这是Chrome发出的请求的屏幕截图。
当我们比较两个请求(来自dev和prod)时,存在一些相似之处和不同之处。请求URL,请求方法和请求有效负载相同。 (引人注目的是,请求有效负载为空,但控制器需要有效负载。)与请求标头不同的是:从生产中提出请求时,请求标头会更多。
答案 0 :(得分:1)
您绝对不应该使用主体获取HTTP方法请求进行解析。
数据存储通过HTTP POST完成,用于存储请求的主体。 请尝试在下面定义代码以发布有效的负载。
@RequestMapping(value = "/find", method=RequestMethod.POST)
@ResponseBody
public List<D> find(@RequestBody P params) throws Exception {
// omitted
}