定义域模型
import java.util.List;
import javax.annotation.Nullable;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Length;
import lombok.Data;
@Data
public class User {
@NotNull(message = "not null")
private Integer userId;
@NotBlank(message = "not blank")
private String userName;
@Nullable
@Length(min = 3, max = 5, message = "not in [3,5]")
private String sex;
@Nullable
@Min(value = 1, message = "not >= 1")
@Max(value = 100, message = "not <= 100")
private Integer age;
@Nullable
@Pattern(regexp = "[\\w]+@[\\w]+.com", message = "not email")
private String email;
@Nullable
@Size(min = 1, max = 3, message = "size not in [1,3]")
private List<String> professions;
}
注解解析
注解 | 说明 |
---|
@NotNull | 不能为NULL |
@NotBlank | 不能为空格 |
@Nullable | 可以为空 |
@Length | 字符串长度限制 |
@Min | 数字边界值限制 |
@Max | 数字边界值限制 |
@Pattern | 正则表达式限制 |
@Size | 数组列表长度限制 |
引入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.9.Final</version>
</dependency>
编写校验类
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
public class UserValidator {
public static void validate(User user) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<User>> violations = validator.validate(user);
if (violations != null) {
violations.forEach(violation -> {
System.out.println(violation.getPropertyPath() + ":" + violation.getMessage());
});
}
}
输出结果
userId:not null
userName:not blank
sex:not in [3,5]
age:not <= 100
email:not email
professions:size not in [1,3]
与spring controller整合
import javax.validation.Valid;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@RequestMapping("/user/doAction")
public String doAction(@Valid @RequestBody User user) {
return "success";
}
}
嵌套校验
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
@Data
public class User {
@Valid
private CreditCard creditCard;
public static class CreditCard {
@NotBlank(message = "not blank")
private String cardNo;
@NotNull(message = "not null")
private Double cardMoney;
}
}