Комментарии 7
Да не один, судя по примерам в google. Вот пример с @PathVariable
всем известного проекта: https://github.com/spring-projects/spring-petclinic/blob/master/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java
Так может поделитесь, как это в JDK7 работало?
UPDATE 2: интересно, что для для @RequestParam
и @PathVariableвторая
работает вторая стратегия LocalVariableTableParameterNameDiscoverer
на основе информации, полученной ASM из байткода. В том числе и для обычного Spring (без Boot) и без параметра компиляции.
Спасибо за статью. В свое время наткнулся на аналогичную проблему — в моем случае интерес вызвал тест, который успешно проходил в gradle test, но не через idea. Любопытство взяло верх и в итоге я все же нашел в недрах spring-boot плагина нечто аналогичное parent pom, что Вы дали в своем примере.
В итоге стало ясно что нужно либо добавить значение атрибута value
/name
для аннотаций RequestParam
/PathVariable
, либо добавить настройку компиляции (-parameters
) в idea.
Что касается совета не использовать значение атрибута аннотаций, полагаясь на название локальной переменной — я все же придерживаюсь более традиционного решения (использовать). Во-первых, это работает независимо от настроек компиляции проекта (idea при импорте gradle spring-boot проекта не применяет параметр parameters=true
к javac). Во-вторых, локальная переменная (аргумент метода) интуитивно рассматривается как что-то, что можно без последствий переименовать, как private-метод, например. А если по какой-то причине это делать нельзя, желательно либо оставлять пометки в коде вроде комментария, но здесь проще дать значение атрибуту. Либо подстраховываться интеграционным тестом, который этот самый параметр передает (ну тест это само собой must have). В общем, это IMHO конечно.
Spring и JDK 8: Вы все еще используете @Param и name/value в Spring MVC аннотациях? Тогда статья для Вас