我正在尝试在spring启动应用程序中实现异常处理。在这里,我使用Exception.class
处理所有异常。我有一个Quation,这个方法可以处理HttpRequestMethodNotSupportedException
吗?如果是,那么当我尝试从邮递员访问错误的方法时,我没有得到任何回复(默认以及我的回复)。
使用以下方法我可以处理NullPointerException
,DataRetrievalFailureException
等但无法处理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);
}
答案 0 :(得分:0)
从https://docs.spring.io/autorepo/docs/spring-framework/3.2.8.RELEASE/javadoc-api/org/springframework/web/HttpRequestMethodNotSupportedException.html您可以看到HttpRequestMethodNotSupportedException
有java.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");
}