Аннотация @PathVariable работает по-разному с прокси на основе интерфейса/класса

У меня есть интерфейс UserController и класс UserControllerImpl. Когда я добавляю @RequestMapping и @PathVariable в UserControllerImpl и использую прокси на основе класса, я могу получить пользователя, используя этот URL:

ПОЛУЧИТЬ: http://локальный:8080/компания-контроль/пользователи/25

Когда я меняю прокси на основе интерфейса и добавляю @RequestMapping и @PatyVariable к интерфейсу, я не могу его получить и получаю следующую ошибку:

Request processing failed; nested exception is java.lang.IllegalArgumentException: Name for argument type [int] not available, and parameter name information not found in class file either.

Я могу решить эту проблему, добавив «userId» в @PathVariable.

@GetMapping("/{userId}")

public User getUser(@PathVariable("userId") int userId);

Может ли кто-нибудь объяснить мне, почему я должен добавить «userId» в @PathVariable, если я использую то же имя переменной? Это связано с прокси?

Возможно, потому, что когда кто-то реализует интерфейс, он может использовать любые имена параметров, которые он хочет (они не должны соответствовать определению интерфейса).

Jason 18.02.2019 22:33
Этот ответ содержит некоторые детали, но в основном для Spring недостаточно информации об отладке интерфейсов, чтобы обнаружить имя параметра путем отражения (если только вы не прыгаете через некоторые обручи).
teppic 18.02.2019 23:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
75
0

Другие вопросы по теме