Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker 诊断工具


Spring Boot 使用 @Valid 校验前端传递的参数

Spring Boot Java 大约 2160 字

@Valid

使用@Valid注解标注的参数,可直接配置校验注解拦截请求。

  • @NotNull:字段不能为空。
  • @NotBlank:字段不能为空或空白字符。
  • @NotEmpty:字段不能为空或数量为零。(字符长度、集合大小、map大小、数组长度不能为零)
  • @Size:字段元素大小范围。(null也视为有效元素)
  • @Null:字段必须为空。
  • @Min:字段最小值。(不适用doublefloat
  • @Max:字段最大值。(不适用doublefloat
  • @Range:字段范围。(@Min@Max结合)
  • @Length:字段长度范围。
  • @Email:字段必须符合Email格式。
  • @AssertTrue:推断是否正确。

嵌套对象的校验

例:UserVo中的Info对象必须加上@Valid注解才能校验Info对象中添加的校验规则。

两个字段联合校验

多个字段联合校验,可在Bean类中定义isValid()方法,结合@AssertTrue注解,Spring框架将自动调用isValid()方法,根据自定义条件校验。

例子

@Data
@Builder
public class UserVo {

    @NotBlank(message = "用户名不能为空")
    @Length(min = 3, max = 8, message = "长度不正确")
    private String name;

    @Min(value = 0, message = "年龄最小0")
    @Max(value = 120, message = "年龄最大120")
    private int age;

    @Email(message = "邮件格式不正确")
    @NotBlank(message = "邮件不能为空")
    private String email;

    @Negative(message = "只能负数")
    private int negative;

    @Positive(message = "只能正数")
    private int positive;

    @NegativeOrZero(message = "只能负数或0")
    private int negativeOrZero;

    @PositiveOrZero(message = "只能正数或0")
    private int positiveOrZero;

    // 级联对象必须不能为空和加@Vaid才能验证
    @Valid
    @NotNull(message = "信息不能为空")
    private Info info;

}

@Data
@Builder
public class Info {

    @Range(min = 0, max = 100, message = "数值1不在正确范围")
    private int integer1;

    @Range(min = 0, max = 100, message = "数值2不在正确范围")
    private int integer2;

    @NotNull(message = "爱好不能为空")
    @Size(min = 1, max =3, message = "爱好个数不正确")
    private List<String> hobbies;

    @NotNull(message = "技能不能为空")
    @Size(min = 1, max =3, message = "技能个数不正确") // 过滤相同,必须是1~3个不同的才符合规则
    private Set<String> skills;

    @AssertTrue(message = "integer1必须小于integer2")
    public boolean isValid() {
        return this.integer1 < this.integer2;
    }

}

@RestController
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @PostMapping("/test")
    public String test(@Valid @RequestBody UserVo userVo) {
        return "ok";
    }

}

代码

https://github.com/fendoudebb/learning/tree/master/java/learn-spring-boot/valid

阅读 5144 · 发布于 2020-05-15

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批