Spring: аннотировать метод с помощью @RequestMapping и @ExceptionHandler? - PullRequest
1 голос
/ 08 июля 2019

Недавно я наткнулся на какой-то код, который раньше не видел в этой форме. Может быть, кто-то здесь может помочь мне лучше понять, что происходит.

А именно, я нашел метод, аннотированный как @RequestMapping и @ExceptionHandler. Я думал, что первый предназначен для обработки запросов, а второй - для обработки исключений, поэтому я подумал бы, что обычно используется либо обеих аннотаций, но не оба одновременно .

Я нашел фрагмент кода здесь: https://github.com/shopizer-ecommerce/shopizer/blob/2.5.0/sm-shop/src/main/java/com/salesmanager/shop/store/api/exception/RestErrorHandler.java#L24

Фрагмент кода:

@RequestMapping(produces = "application/json")
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public @ResponseBody ErrorEntity handleServiceException(Exception exception) {
    log.error(exception.getMessage(), exception);
    ErrorEntity errorEntity = createErrorEntity(null, exception.getMessage(),
                                                exception.getLocalizedMessage());
    return errorEntity;
}

У меня два вопроса:

  1. В соответствии с Spring-документацией по @RequestMapping, неаннотированные параметры метода (не относящиеся к какому-либо особому типу) метода @RequestMapping неявно помечаются @ModelAttribute (см. * 1027). * «Любой другой аргумент» в конце таблицы по вышеуказанной ссылке). Итак, в приведенном фрагменте кода параметр Exception также неявно помечается @ModelAttribute? И если да, имеет ли это смысл?
  2. Может ли вообще иметь смысл аннотировать метод с помощью @RequestMapping и @ExceptionHandler (например, для обработки как запросов, так и исключений), или это будет плохая форма?

1 Ответ

0 голосов
/ 08 июля 2019

хороший вопрос.Я бы сказал, попробуйте это.на контроллере возьмите два метода.в одном методе используйте просто RequestMethod и напишите код, приняв атрибут модели со страницы.В этом методе создайте сценарий для исключения NullPointerException.

В методе 2 аннотируйте и RequestMapping, и ExceptionHandler.И вы можете видеть, получаете ли вы запрос, ответ с ModelAttributes от метода один к методу 2.

, если да, то это поможет нам оценить исключение и обработать недопустимые сценарии, где нам понадобятся значения атрибута модели.

Также в соответствии с объяснением, которое вы вставили выше, ModelAttribute неявно используется для RequestMapping, а не для всех аннотаций в методе контроллера.

Пожалуйста, сообщите нам.

...