我们可以使用Exception类处理HttpRequestMethodNotSupportedException

时间:2018-06-04 13:16:31

标签: java exception-handling

我正在尝试在spring启动应用程序中实现异常处理。在这里,我使用Exception.class处理所有异常。我有一个Quation,这个方法可以处理HttpRequestMethodNotSupportedException吗?如果是,那么当我尝试从邮递员访问错误的方法时,我没有得到任何回复(默认以及我的回复)。

使用以下方法我可以处理NullPointerExceptionDataRetrievalFailureException等但无法处理HttpRequestMethodNotSupportedException

RestExceptionHandler

import com.spacestudy.model.ExceptionMessage;

import javax.servlet.http.HttpServletResponse;

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;

@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {


    @ExceptionHandler(Exception.class)
    public ResponseEntity<ExceptionMessage> handleAllExceptionMethod(Exception ex,WebRequest requset,HttpServletResponse res) {


        ExceptionMessage exceptionMessageObj = new ExceptionMessage();

        exceptionMessageObj.setStatus(res.getStatus());
        exceptionMessageObj.setError(ex.getLocalizedMessage());     
        exceptionMessageObj.setException(ex.getClass().getCanonicalName());
        exceptionMessageObj.setPath(((ServletWebRequest) requset).getRequest().getServletPath());  

        return new ResponseEntity<ExceptionMessage>(exceptionMessageObj, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR);          
    }   

3 个答案:

答案 0 :(得分:0)

https://docs.spring.io/autorepo/docs/spring-framework/3.2.8.RELEASE/javadoc-api/org/springframework/web/HttpRequestMethodNotSupportedException.html您可以看到HttpRequestMethodNotSupportedExceptionjava.lang.Exception作为父级,因此您的异常处理程序也会处理它。 顺便说一句,您可以通过在仅支持GET请求的URL上发送POST请求来轻松地手动测试

答案 1 :(得分:0)

@ExceptionHandler首先寻找特定的异常(例如HttpRequestMethodNotSupportedException),如果找不到它的控制器,则使用Exception.class的泛型异常处理程序。

要回答您的问题:,您的控制器也应该能够捕获HttpRequestMethodNotSupportedException例外。

查看@org.springframework.web.bind.annotation.ExceptionHandler的Spring文档。关于开头的几点说:

  

异常参数:声明为一般异常或更具体的异常。

答案 2 :(得分:0)

您可以从ResponseEntityExceptionHandler覆盖handleHttpRequestMethodNotSupported方法。 大笑这篇文章(第5条):https://www.baeldung.com/global-error-handler-in-a-spring-rest-api

例如

    @Override
protected ResponseEntity<Object> handleHttpRequestMethodNotSupported(final HttpRequestMethodNotSupportedException ex,
                                                                     final HttpHeaders headers,
                                                                     final HttpStatus status,
                                                                     final WebRequest request) {

    
    return ResponseEntity.ok("ok");
}