MethodArgumentTypeMismatchException вызов метода Rest с помощью curl

У меня есть базовое приложение SpringBoot 2.0.6.RELEASE. Использование Spring Initializer, JPA, встроенного Tomcat, механизма шаблонов Thymeleaf и пакета как исполняемого JAR с спокойной архитектурой

@PutMapping(path = "/users/alarms2", consumes = "application/json", produces = "application/json")
    public void setAlerts2(@RequestHeader(value = "Authorization") String authHeader,
            @RequestBody AlertConfiguration alertConfiguration)

            throws DataAccessException, ClientProtocolException, SQLException, IOException {
..
}

но когда я вызываю этот метод из curl:

curl -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJyaWNhcmQub2SAsZUBnbWFpbC5jb20iLCJleHAiOjE2MDAxODMzNDAsImlhdCI6MTUzOTcwMzM0MH0.2gbyyGnkcoHjOw7HbUBBQgb59Bw8iAyFbqTe2DPUlOA-V5UwrW3KXWHZlXssZni8oRJ_o1QRzAFtAWMfz7f0Yw" -d ‘{“symbol": “MENU”,  "alarmKey”:”VEGAN” , "enabled": "true"}' "http://95.90.225.68:1133/restos/api/v1/users/alarms2"

Я получил такую ​​ошибку на сервере:

2018-10-17 17:16  [http-nio-1133-exec-9] WARN  o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver.resolveException(140) - Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'long'; nested exception is java.lang.NumberFormatException: For input string: "alarms2"]

Я не понимаю, ваш локон не должен быть PUT вместо GET? curl -X PUT?

Adina Rolea 17.10.2018 20:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
1 004
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

У вас, вероятно, есть другой метод с более общей сигнатурой, которая частично совпадает с данной. Что-то вроде:

@PutMapping(path = "/users/{userId}", ...)
public void someMethod(@PathVariable(value = "userId") Long userId) {
...
}

Поэтому, когда вы потребляете /api/v1/users/alarms2, Spring сначала пытается преобразовать «alarms2» (который, очевидно, является нет действительным Long) в userId (который является Long)

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