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

Send message to a client when an HTTP method not supported

我创建了一个 REST 控制器,它可以像往常一样使用 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 在您的控制器中找不到 HEAD 的任何方法,因此它没有使用它,也没有使用您的@ExceptionHandler。它将用于控制器内部出现的异常。摘自 Spring Frameword 参考:您在控制器中使用 @ExceptionHandler 方法注释来指定在控制器执行期间抛出特定类型的异常时调用哪个方法 方法(强调我的)。

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