【问题标题】:Spring controller returns 500 server error after updating Spring version to 4.2.3将 Spring 版本更新到 4.2.3 后 Spring 控制器返回 500 服务器错误
【发布时间】:2015-12-16 15:26:55
【问题描述】:

我使用 Spring 4.1.8.RELEASE 版本在我的应用程序中没有任何问题。我对用作 REST 资源的 Spring 控制器进行了基本设置,并定义了以下资源:

@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 可能由多种原因引起,您应该提供更详细的错误日志
  • 不幸的是没有错误日志,方法处理正确,但是客户端总是收到500。
  • 代码执行了吗?
  • @AdamSkywalker 是的,代码执行成功,没有任何错误。但是,正如我在之前的评论中提到的,客户收到 500 - 并且根本没有错误。
  • 浏览器控制台说什么?

标签: java spring spring-mvc


【解决方案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

【讨论】:

    【解决方案2】:

    空指针异常。在您的代码中的某个地方。这与 Spring Framework 无关。不幸的是,异常可能不会在控制台上打印。

    错误 500:SRVE0295E:报告的错误:500

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 2018-08-05
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      相关资源
      最近更新 更多