Метод отдыха не получает правильных данных

У меня есть базовое приложение SpringBoot. с использованием Spring Initializer, JPA, встроенного Tomcat, механизма шаблонов Thymeleaf и пакета в виде исполняемого файла JAR. Я определил этот метод Rest для обновления пользователя

@PutMapping(path = "/api/users/{id}", 
                        consumes = "application/json", 
                        produces = "application/json")
    public ResponseEntity<User> updateUser
                                    (HttpServletRequest request, 
                                    @PathVariable long id,
                                    User user) {

        System.out.println(user);
        saveUser (user)
        return ResponseEntity.ok(user);

    }

Я вызываю этот метод из консоли, используя

curl -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJyaWNhcmQub2xsZUBnbWFpbC5jb20iLCJleHAiOjE1MjgxMTM3NTIsImlhdCI6MTUyNzUwODk1Mn0.QdxabtU1U87pYvyTstT1EG3E6uVpLo2mXCF0FF8iD6acKoAXKl_A0-eV_GrpOFg5FF1qR6B7llI5_USJL85YTQ" -d '{
\"id\":1,\"username\":\"[email protected]\",\"email\":\"[email protected]\",\"firstName\":\"Pere\",\"lastName\":\"PERIS\",\"country\":\"CAT\",\"enabled\":true}' "http://127.0.0.1:2233/iCrypts/api/users/1"

Но на System.out.println(user); все значения, которые я получаю от POJO, равны нулю (!?), А вот id, равный 1

Как выглядит ваш класс User? Кроме того, вы должны добавить аннотацию @RequestBody к вашему параметру User user, поскольку я считаю, что Spring по умолчанию вместо этого ожидает параметр запроса.

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

Ответы 1

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

Аннотация @RequestBody отсутствует

public ResponseEntity<User> updateUser
                                (HttpServletRequest request, 
                                @PathVariable long id,
                                @RequestBody User user) {
......

}

Причина, по которой он содержит id со значением 1, заключается в том, что он должен автоматически генерироваться на уровне сохраняемости.

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