Можем ли мы обработать HttpRequestMethodNotSupportedException, используя класс Exception - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь реализовать обработку исключений в приложении весенней загрузки.Здесь я обрабатываю все исключения, используя Exception.class.У меня есть один вопрос, может ли этот метод обрабатывать 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);          
    }   

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

@ExceptionHandler сначала ищет конкретное исключение (например, HttpRequestMethodNotSupportedException), и если контроллер для него не найден, используется обработчик для общего исключения Exception.class.

. Чтобы ответитьВаш вопрос: ДА , ваш контроллер должен быть в состоянии перехватить также HttpRequestMethodNotSupportedException исключение.

Посмотрите документы Spring @org.springframework.web.bind.annotation.ExceptionHandler.Один из пунктов в начале говорит:

Аргумент исключения: объявлен как общее исключение или как более конкретное исключение.

0 голосов
/ 04 июня 2018

из https://docs.spring.io/autorepo/docs/spring-framework/3.2.8.RELEASE/javadoc-api/org/springframework/web/HttpRequestMethodNotSupportedException.html вы можете видеть, что HttpRequestMethodNotSupportedException имеет java.lang.Exception в качестве родителя, поэтому ваш обработчик исключений также будет обрабатывать его.Кстати, вы можете легко проверить это вручную, отправив запрос POST на URL, который поддерживает только запросы GET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...