Spring @Valid работает для запросов формы, но не с телом JSON

У меня простой класс передачи данных

@Data
public class UserDto {

    @NotNull
    @NotEmpty
    private String username;

    @NotNull
    @NotEmpty
    private String password;

    @NotNull
    @NotEmpty
    private String email;
}

В моем контроллере я хочу использовать объект.

@PostMapping("/users/create")
public ResponseEntity<Object> createUser(@ModelAttribute("UserDto") @RequestBody @Valid UserDto accountDto, BindingResult bindingResult, HttpServletRequest request)  {
    System.out.println(accountDto);
    System.out.println(accountDto.getUsername());
    System.out.println(accountDto.getPassword());
    System.out.println(bindingResult.hasErrors());

    return new ResponseEntity<>("success", HttpStatus.OK);

}

Я использую почтальон для проверки своего API. Запросы работают нормально при отправке в виде form или x-www-form-urlencoded. Я получаю следующий результат:

UserDto (имя пользователя = dsfssf, пароль = dsfsdgfsg, [email protected])

dsfssf

dsfsdgfsg

ложный

Однако при отправке запроса в виде объекта JSON, например

{"username": "ssss", "password": "test", "email": "[email protected]" }

Все, что я получаю, это

UserDto (имя пользователя = ноль, пароль = ноль, адрес электронной почты = ноль)

нулевой

нулевой

истинный


person isADon    schedule 13.06.2017    source источник
comment
Вы пробовали удалить атрибут @ModelAttribute и протестировать его?   -  person Rana_S    schedule 13.06.2017


Ответы (1)


Удалите @ModelAttribute, иначе он будет искать данные внутри параметров запроса.

Только @RequestBody сообщает Spring искать данные внутри тела запроса.

person kagmole    schedule 13.06.2017