我在我的应用程序中使用 Spring 4.1.8.RELEASE
版本没有任何问题。我对作为 REST 资源的 Spring Controller 进行了基本设置,并定义了以下资源:
@RequestMapping(
value = "/emailvalidation",
method = RequestMethod.POST)
public ResponseEntity userEmailValidation(
@Valid @RequestBody UserEmailValidationRequest request, BindingResult bindingResult) {
validator.validate(ErrorCode.class, bindingResult);
backendClient().validateUserEmail(request);
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
这是一个正常工作的资源,如果验证通过,它会返回 HTTP 状态 201 的成功响应。
问题是,将版本更新为
4.2.3.RELEASE
后,资源总是返回 HTTP 状态 500。有没有一种新的方法来处理那些我想做 POST 的资源,但是没有响应数据?我找不到任何关于此的更新,也没有任何问题。
最佳答案
问题是有一个运行时异常导致方法返回 500
状态。
我有一个扩展 LoggingFilter
的 org.springframework.web.filter.OncePerRequestFilter
。在这个过滤器中,我有一个方法试图获取响应输出流(见下面的用法)
byte[] responseData = response.getOutputBuffer();
String payload = new String(responseData).replace("\n", "");
message.append(";payload=").append(payload);
对于 4.2 之前的版本,
response.getOutputBuffer()
在没有响应数据时返回 byte[0]
,所以一切正常。从 4.2.* 版本开始,这已更改为在没有响应数据的情况下返回
null
。这导致了 NullPointerException
,它产生了 500 Server Error
。关于java - 将 Spring 版本更新到 4.2.3 后,Spring Controller 返回 500 服务器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34315867/