Как заставить аннотацию работать с каждым методом, когда он аннотируется в классе, например, @ResponseBody - PullRequest
0 голосов
/ 08 мая 2018

Я хочу написать аннотацию типа @ResponseBody, использовать ее в классе таким образом, чтобы она могла работать с любым методом. Поэтому я хочу знать, как реализовать.

1 Ответ

0 голосов
/ 08 мая 2018

То, как аннотация уровня класса применяется ко всем методам, не относится к аннотации @ResponseBody, она применима ко всем таким аннотациям, например, @Transactional. При компиляции кода с аннотациями компилятор запускает соответствующий процессор аннотаций (который проявил интерес к этой конкретной аннотации). Процессор аннотаций обычно использует отражение для проверки компилируемых элементов. Процессор может просто выполнить проверки фрагментов кода / методов, изменить их или сгенерировать новый код перед окончательной компиляцией. И это может включать модификацию всех методов этого класса. См. http://mkyong.com/java/java-custom-annotations-example для примера реализации пользовательских аннотаций на уровне класса.

Идет в @ResponseBody:

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/ResponseBody.html утверждает, что начиная с весенней версии 4.0 @ResponseBody аннотация также может быть добавлена ​​на уровне типа, и в этом случае она наследуется и не требует добавления на уровне метода.

Как работает @ResponseBody:

Если вы аннотируете метод (или инкапсулирующий класс) с помощью @ResponseBody, Spring попытается преобразовать возвращаемое значение метода и автоматически записать его в ответ http.

В зависимости от вашей конфигурации у Spring есть список HttpMessageConverters, зарегистрированных в фоновом режиме. Обязанность HttpMessageConverter - преобразовать возвращаемое значение метода в тело ответа HTTP, в зависимости от предварительно определенного типа MIME.

Каждый раз, когда выданный запрос достигает аннотации @ResponseBody, пружина перебирает все зарегистрированные HttpMessageConverters, ища первое, которое соответствует данному типу и классу пантомимы, а затем использует его для фактического преобразования.

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