@Valid注解详解

@Valid注解详解
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码  

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说@Valid注解详解,希望能够帮助大家进步!!!

  • @Valid 用于验证注解是否符合要求,直接加在变量user之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。
@RestController

@RequestMapping("/user")

public class UserController {

@PostMapping

public User create (@Valid @RequestBody User user) {

System.out.println(user.getId());

System.out.println(user.getUsername());

System.out.println(user.getPassword());

user.setId("1");

return user;

}

}
  • 然后在 User 类中添加验证信息的要求:
public class User {

private String id;


@NotBlank(message = "密码不能为空")

private String password;

}

​@NotBlank 注解所指的 password 字段,表示验证密码不能为空,如果为空的话,上面 Controller 中的 create 方法会将message 中的"密码不能为空"返回。

当然也可以添加其他验证信息的要求:

限制 说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
  • 除此之外还可以自定义验证信息的要求,例如下面的 @MyConstraint:
public class User {


private String id;


@MyConstraint(message = "这是一个测试")

private String username;


}
  • 注解的具体内容:
@Constraint(validatedBy = {MyConstraintValidator.class})

@Target({ELementtype.METHOD, ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

public @interface MyConstraint {

String message();

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

}
  • 下面是校验器:
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {

@Autowired

private UserService userService;


@Override

public void initialie(@MyConstraint constarintAnnotation) {

System.out.println("my validator init");

}


@Override

public boolean isValid(Object value, ConstraintValidatorContext context) {

userService.getUserByUsername("seina");

System.out.println("valid");

return false;

}

}

本文来源huayang183,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/18050

发表评论