为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot REST服务异常处理

Spring Boot REST服务异常处理

慕标5832272 2019-10-15 09:28:11
我正在尝试建立一个大型的REST服务服务器。我们正在使用Spring Boot 1.2.1,Spring 4.1.5和Java8。我们的控制器正在实现@RestController和标准的@RequestMapping注释。我的问题是Spring Boot为控制器异常设置了默认重定向到/error。从文档:Spring Boot默认提供一个/ error映射,以一种明智的方式处理所有错误,并且在servlet容器中注册为“全局”错误页面。对使用Node.js编写REST应用程序已有多年的经验,对我而言,这绝非明智之举。服务端点生成的任何异常都应在响应中返回。我不明白为什么您要将重定向发送到最有可能是Angular或JQuery SPA使用者的地方,该使用者只是在寻找答案,不能或不会对重定向采取任何措施。我想做的是设置一个可以接受任何异常的全局错误处理程序-有目的地从请求映射方法抛出,或者由Spring自动生成(如果未为请求路径签名找到处理程序方法,则为404),然后返回标准格式的错误响应(400、500、503、404)到客户端,而无需任何MVC重定向。具体来说,我们将处理错误,使用UUID将其记录到NoSQL,然后将正确的HTTP错误代码与JSON正文中的日志条目的UUID返回给客户端。文档对如何执行此操作一直含糊不清。在我看来,您必须创建自己的ErrorController实现或以某种方式使用ControllerAdvice,但是我所看到的所有示例仍然包括将响应转发到某种错误映射,这没有帮助。其他示例建议您必须列出要处理的每个Exception类型,而不仅仅是列出“ Throwable”并获取所有内容。谁能告诉我我错过了什么,或者在没有暗示Node.js更容易处理的前提下为我指出正确的方向?
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

我认为ResponseEntityExceptionHandler符合您的要求。HTTP 400的示例代码片段:


@ControllerAdvice

public class MyExceptionHandler extends ResponseEntityExceptionHandler {


  @ResponseStatus(value = HttpStatus.BAD_REQUEST)

  @ExceptionHandler({HttpMessageNotReadableException.class, MethodArgumentNotValidException.class,

      HttpRequestMethodNotSupportedException.class})

  public ResponseEntity<Object> badRequest(HttpServletRequest req, Exception exception) {

    // ...

  }

}


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 1001 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信