我在使用Spring 4.1.8.RELEASE
版本时没有任何问题。我有Spring控制器的基本设置,它作为REST资源并定义了以下资源:
@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的那种资源,但是没有响应数据?我找不到任何关于此的更新,也没有任何问题。
答案 0 :(得分:1)
问题是有一个运行时异常导致该方法返回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
。
答案 1 :(得分:0)
的NullPointerException。代码中的某个地方。这与Spring Framework无关。不幸的是,异常可能无法在控制台上打印。
错误500:SRVE0295E:报告错误:500