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

时间:2015-04-20 13:21:42

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

我已经创建了一个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页面发回?

1 个答案:

答案 0 :(得分:1)

问题是SpringMVC在控制器中没有找到HEAD的任何方法,因此它不使用它,并且不使用@ExceptionHandler。它将用于控制器内部出现的异常。从Spring Frameword引用中提取:在控制器中使用@ExceptionHandler方法注释来指定在执行控制器方法期间抛出特定类型的异常时调用哪个方法 (强调我的)。

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