IllegalArgumentException: имя аргумента типа [java.lang.Long] не указано, а информация об имени параметра недоступна через отражение. Убедитесь, что компилятор использует флаг -parameters.
Опция компилятора -parameters уже передана (проверено в журналах отладки Gradle, вероятно, из подключаемого модуля Spring Boot), и когда я запускаю javap для проверки скомпилированного класса, я вижу раздел метаданных MethodParameters с правильными аргументами метода.
Кроме того, эта проблема, похоже, возникает периодически (как наблюдалось в Datadog). Как и в случае, вызовы иногда завершаются успешно, а иногда завершаются неудачно, даже для одних и тех же методов.
Мы используем закрепленные номера версий Spring (3.3.13) и его зависимостей, поэтому маловероятно, что это какие-либо изменения в версии Spring. Кроме того, это было изменено давным-давно, поэтому не должно быть основной причиной.
Это оставляет мне две теории:
- Ошибка в JVM. Мы используем OpenJDK версии 17.0.15+6-alpine-r0, хотя я не могу найти никаких открытых проблем для этой версии.
- Ява-агент Datadog, который мы используем для инструментирования, каким-то образом портит метаданные MethodParameters классов контроллера.
Изменить: на данный момент я решил обновить все методы контроллера в нашем приложении. Основная причина пока не обнаружена, но я все еще ищу.
Edit2: метод контроллера для справки. Здесь @ResourceCategory — это пользовательская аннотация. У него нет аргумента Long, как я упоминал выше, но я наблюдал, что это происходит и с типами Integer и String.
@GetMapping(value="/corporate/{companyId}")
@ResourceCategory(INTERNAL_API)
public List getCompanyUserList(@PathVariable Integer companyId){
return userAccountService.getCorporateUsers(companyId);
}
Класс аннотирован следующим образом:
@RestController
@RequestMapping(ConfigRestEndpoint.API_CONTEXT + "/user")
@AllArgsConstructor
@Authorized
public class UserRestController {...}
Подробнее здесь: https://stackoverflow.com/questions/798 ... hod-parame
Мобильная версия