【问题标题】:Spring @Valid works for form requests but not with JSON bodySpring @Valid 适用于表单请求,但不适用于 JSON 正文
【发布时间】:2017-11-15 16:31:57
【问题描述】:

我有一个简单的数据传输类

@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。当以formx-www-form-urlencoded 发送请求时,请求工作正常。我得到以下输出:

UserDto(用户名=dsfssf,密码=dsfsdgfsg,电子邮件=ssfds@dsgfsg.com)

dsfssf

dsfsdgfsg

但是,当将请求作为 JSON 对象发送时,例如

{"username": "ssss", "password": "test", "email": "samauaa@sdfsdfsd.com" }

我得到的只是

UserDto(用户名=null,密码=null,电子邮件=null)

是的

【问题讨论】:

  • 您是否尝试过删除@ModelAttribute 并对其进行测试?

标签: json spring validation spring-mvc spring-validator


【解决方案1】:

删除@ModelAttribute,否则它会在请求参数中查找数据。

@RequestBody 单独告诉 Spring 在请求正文中查找数据。

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2020-06-13
    • 2017-08-06
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多