首页 > 解决方案 > 如何在 Spring Boot 中使用 @Valid 验证对象?

问题描述

我正在开发一个 Spring Boot 项目,并且正在尝试验证对象中的某些字段。

实际上我有一个接受参数的 API。我知道我可以@Valid像这样使用 API 声明:

@GetMapping(value="/...")
Object myMethod(@RequestParam(value="name") @Size(min = 3) String name)

但我不想在那里验证。我有一个“过滤器”对象来验证这些值,所以我期望类似:

控制器文件

@override
public Object myMethod(String name){
  @Valid Filter filter = new Filter(name)
}

而且 filter 不是一个实体,只是一个带有验证标签的类:

public class Filter

  @Size(min = 3)
  private String name;

  public Filter(name){
    this.name = name;
  }

  // getters and setters

所以这个想法是使用@Valid创建对象并在任何验证不成功时抛出异常。这可能吗?

我找到了多种解决方案来验证查询参数、正文请求等,但不是关于验证使用new.

标签: javaspringspring-boot

解决方案


据我所知,这是不可能的。最接近您的案例的解决方案是手动验证实体:

@Autowired
private Validator validator;

然后像这样验证你的对象:

@Override
public Object myMethod(String name){
    Filter filter = new Filter(name);
    validator.validate(filter);
}

推荐阅读