先看下注释说明:
注解 | 说明 |
---|---|
@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,也可以通过正则表达式和flag指定自定义的email格式 | |
@Range | 被注释的元素必须在合适的范围内 |
---- | |
@CreditCardNumber | 对信用卡号进行一个大致的验证 |
解释很简单,可以直接使用,但需要注意几种使用场景
如果是普通spring项目需要引入依赖:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
如果你是springboot项目,则无需这样做,因为它里面已经自带了
实体类中可以直接使用:
package com.***;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
@Data
public class User{
/** 信息集合*/
@NotEmpty(message = "信息集合不能为空")
@Size(max=5,message="最大长度为5")//此处则表示集合个数不能超过5个
private List<Message> messages;
/** 业务订单号*/
@NotBlank(message = "业务订单号不能为空")
@Length(message = "业务订单号长度不能大于{max}", max = 20)
//@Size(max=10,message="最大长度为10") 此注解跟 @Length 在此处效果一样都是校验字符串长度的,二选一即可
private String orderNo;
/** 业务类型,1:测试;2:实操*/
@NotNull(message = "业务类型不能为空")
@Range(message = "业务类型数据只能为{min}跟{max}", min = 1, max = 2)
private int taskType;
/** 创建时间*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@NotNull(message = "创建时间不能为空")
private Date CreateTime;
}
实体类中以上几种注解可以概括大部分场景
controller层:
public class UserController {
@PostMapping("/add")
public String add(@RequestBody @Valid User user,BindingResult bindingResult) {
if (bindingResult.hasErrors()){
return bindingResult.getFieldError().getDefaultMessage();
//return ().get(0).getDefaultMessage(); 此方法与上面返回效果一样,可二选一
}
}
}
注意:
- BindingResult 需跟 @Valid配套使用, 且一定要在 校验参数后面使用否则 无效
- 如果报参数类型错误可根据上面注释说明查看 注解所对应字段类型是否符合规范
- 如果报 时间转换解析异常 按上面实体类中 时间字段上 加上@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”) 即可,注意对应你自己的格式 pattern
- 以上内容是本人从各大文章 整理过来的,很多注解没有做 一 一验证,如果不对请指出