rest - 当不支持 HTTP 方法时向客户端发送消息

标签 rest spring-mvc tomcat http-status-codes

我创建了一个 REST Controller ,它可以像往常一样使用 Spring MVC 处理 GET、POST、PUT 和 DELETE HTTP 请求。 Web 服务器是 Tomcat 8。 例如,如果使用 HEAD 方法发送请求,则响应是来自 Tomcat 的带有消息的错误页面

HTTP Status 501 - Method LINK is not is not implemented by this servlet for this URI

我有这样的异常处理程序:

@ResponseBody
@ExceptionHandler(Throwable.class)
public ResponseEntity<?> exceptionHandler() {

    Error error = createError("error_message.unforeseen_error");

    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}

但在这种情况下它没有发现任何错误。

有没有办法发回用 JSON 对象包装的消息作为响应而不是这个 Tomcat 页面?

最佳答案

问题是 SpringMVC 在你的 Controller 中没有找到任何 HEAD 方法,所以它没有使用它,你的 @ExceptionHandler 也没有被使用。它将用于 Controller 内部出现的异常。摘自 Spring Frameword 引用:您在 Controller 中使用 @ExceptionHandler 方法注释来指定在 Controller 方法执行期间抛出特定类型的异常时调用哪个方法(强调我的)。

要在任何 Controller 之外处理异常,您必须注册一个 HandlerExceptionResolver bean,它将替换 Spring MVC 默认提供的 DefaultHandlerExceptionResolver。您可以直接将 Json 字符串放入响应中并从 resolve 方法返回 null(我的首选方式),或者将元素放入模型中并使用 View 来格式化 Json。

关于rest - 当不支持 HTTP 方法时向客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29749105/

相关文章:

java - 静态文件在 Windows 中使用 tomcat 7 在 Spring MVC 中提供,但在 Linux 中不提供

java - 无法访问tomcat javascript文件夹

java - 为什么我在执行 POST 请求时收到 405 Method Not Allowed

javascript - 将 AngularJS 与 SpringMVC 结合使用 - 为什么以及如何?

java - 使用 spring security 在服务层中获取登录用户

Tomcat7 .war 项目未部署

java - 我如何在没有 Tomcat 的情况下在 Apache 2.2 上运行 Java 应用程序?

rest - REST API响应部分成功

WCF REST 服务 : Method parameter (object) is null

java - 无法在运行时更改 dropwizard 中的日志级别