常用校验注解
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
//setter 返回 {@code this} 而不是 {@code void}。
@Accessors(chain = true)
public class TestDto {
/*** ID*/
@NotNull(message = "id不能为空")
private String id;
@NotBlank(message = "姓名不能为空")
@Length(min = 1,max = 4, message = "用户名不能超过4个字符")
@Pattern(regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$", message = "用户昵称限制:最多4个字符,包含文字、字母和数字")
private String name;
/** 手机号*/
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
private String mobile;
/** 邮箱*/
@NotBlank(message = "联系邮箱不能为空")
@Email(message = "邮箱格式不对")
private String email;
/*** 创建时间 */
@Future(message = "时间必须是将来时间")
private Date createTime;
// 销售日期(格式:yyyy-MM-dd)
@Length(max = 20, message = "autoBoughtTime不超过{max}个字符")
@Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$", message = "autoBoughtTime格式必须为yyyy-MM-dd")
private String autoBoughtTime;
@Range(min = 60,max = 80,message = "年龄必须要60到80之间,60=<年龄=<80")
private int age;
@Pattern(regexp = "^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message = "身份证格式错误")
private String idCard;
/*** 集合大小检验 */
@NotNull(message = "list不能为空")
@Size(min = 1, message = "list大小不可为0")
private List<String> list;
}
依赖
hibernate-validator和validation-api
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.14.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
<scope>compile</scope>
</dependency>
如果已经有了spring-boot-starter-web,就不用再单独引入了
检验工具类
构建校验器,对参数做检验
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Iterator;
import java.util.Set;
/**
* 检验工具类
*/
public class ValidatorUtils {
private ValidatorUtils() { }
private static Validator validator;
static {
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
/**
* 校验对象
*
* @param object 待校验对象
* @param groups 待校验的组
* @throws RRException 校验不通过,则报RRException异常
*/
public static void validateEntity(Object object, Class<?>... groups) throws RRException {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
if (!constraintViolations.isEmpty()) {
Iterator<ConstraintViolation<Object>> iterator = constraintViolations.iterator();
StringBuilder msg = new StringBuilder();
while (iterator.hasNext()) {
ConstraintViolation<Object> constraint = iterator.next();
msg.append(constraint.getMessage()).append(',');
}
throw new RRException(msg.toString().substring(0,msg.toString().lastIndexOf(',')));
}
}
}
自定义的异常类
public class RRException extends RuntimeException{
private String msg;
private int code = 500;
public RRException(String msg) {
super(msg);
this.msg = msg;
}
public RRException(String msg, Throwable e) {
super(msg, e);
this.msg = msg;
}
public RRException(String msg, int code) {
super(msg);
this.msg = msg;
this.code = code;
}
public RRException(String msg, int code, Throwable e) {
super(msg, e);
this.msg = msg;
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
单元测试校验
@Test
public void validateTestDto() {
TestDto dto = new TestDto();
dto.setId("123");
dto.setName("张三李四");
dto.setAge(80);
dto.setMobile("123");
dto.setEmail("456");
dto.setList(new ArrayList<>());
ValidatorUtils.validateEntity(dto);
}
这里会根据我们的注解顺序做校验,1,不能为空2.字符串长度3.格式是否正确
Controller控制器
post请求,参数前加上@Valid就会触发校验器校验参数
@PostMapping(value = "/validator")
public Response testValidator(@RequestBody @Valid TestDto testDto){
return Response.ok();
}
上面例子中使用的Response 以及异常的统一处理可以参考
https://blog.csdn/m0_51527921/article/details/125223999
更多推荐
springboot validator 常用校验注解
发布评论