Имя аргумента типа [java.lang.String] не указано, а информация об имени параметра недоступна через отражение

У меня возникла проблема с Spring Boot. Недавно я обновил зависимость Spring Boot до версии 3.2.4.

Когда я пытаюсь вызвать следующую конечную точку:

    @PutMapping("/{uid}/test/{state}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void update(
            Context context,
            @PathVariable String uid,
            @PathVariable String state
    ) throws RuntimeFunctionalException {
        this.service.updateState(uid, state, context);
    }

Выход:

Имя аргумента типа [java.lang.String] не указано, а информация об имени параметра недоступна через отражение. Убедитесь, что компилятор использует флаг «-parameters».

Кто-нибудь еще сталкивается с той же проблемой?

4
0
670
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Пожалуйста, включите эту конфигурацию в свой POM-файл.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <parameters>true</parameters>
    </configuration>
</plugin>

эта конфигурация важна <parameters>true</parameters>Подробности по ссылке

Ответ принят как подходящий

Чтобы устранить проблему, добавьте имя для аннотаций @RequestParam и @PathVariable.

Итак, вместо этого:

public ResponseEntity<CommandResponse> update(
    @PathVariable long param1, 
    @RequestParam String param2) {
    // ...
}

используйте это >>>

public ResponseEntity<CommandResponse> update(
    @PathVariable("param1") long param1, 
    @RequestParam("param2") String param2) {
    // ...
}

У меня та же ошибка, что и у вас. Я обнаружил, что вам действительно нужно добавить опцию «-parameters» в компилятор Java. В зависимости от вашего инструмента сборки вам следует предпринять правильные действия. Как и в моем случае, я использую Gradle, вот как это выглядит:

tasks.withType(JavaCompile) {
options.compilerArgs = ['-parameters']
doFirst {
    println "Compiler args: ${options.compilerArgs}"
}}

Кроме того, я использую VS Code, и когда я запускаю файл приложения с помощью команды «Выполнить Java» (при щелчке правой кнопкой мыши), он не работает. Использование ./gradlew bootRun работает так, как и ожидалось!
И еще: если вы используете явную PathVariable, она должна работать.

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