我正在尝试设置大型REST服务服务器。我们使用Spring Boot 1.2.1、Spring 4.1.5和Java 8。我们的控制器实现了@RestController和标准的@RequestMapping注释。
我的问题是,Spring Boot将控制器异常的默认重定向设置为/error
。从文档中:
默认情况下,Spring Boot提供了一个/error映射,以合理的方式处理所有错误,并在servlet容器中注册为“全局”错误页面。
经过多年使用Node.JS编写REST应用程序,这对我来说一点也不明智。服务端点生成的任何异常都应在响应中返回。我不能理解为什么你会发送一个重定向给一个很可能是Angular或jQuery SPA的消费者,他们只是在寻找一个答案,而不能或不会对重定向采取任何行动。
我想要做的是设置一个全局错误处理程序,它可以接受任何异常-无论是从请求映射方法中有目的地抛出,还是由Spring自动生成(404,如果没有为请求路径签名找到处理程序方法),并在没有任何MVC重定向的情况下向客户端返回标准格式的错误响应(400,500,503,404)。具体来说,我们将获取错误,使用UUID将其记录到NoSQL,然后使用JSON主体中的日志条目的UUID将正确的HTTP错误代码返回给客户端。
医生们对如何做到这一点一直含糊其辞。在我看来,您必须要么创建自己的错误控制器实现,要么以某种方式使用控制器建议,但我看到的所有示例仍然包括将响应转发到某种错误映射,这没有帮助。其他示例表明,您必须列出要处理的每个异常类型,而不是只列出“ Throwable ”并获取所有内容。
有没有人能告诉我我错过了什么,或者给我指出正确的方向,告诉我如何做到这一点,而不是暗示Node.JS更容易处理?