我在我的应用程序中使用 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 状态。

我有一个扩展 LoggingFilterorg.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/

10-16 07:08
查看更多