JSR-303参数校验
JSR-303参数校验
步骤
1.创建校验参数类
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.*;
import java.util.Date;
/**
* 参数验证请求参数
* @Author shizhongcai
* @Date 2019/11/20 15:35
*/
@Data
public class ValidatorReqVo{
@NotNull(message = "id不能为空")
private Integer id;
@NotNull
@Future(message = "格式为yyyy-MM-dd,且为将来时间")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date future;
@NotNull
@DecimalMin(value = "0.1")
@DecimalMax(value = "1000")
private Double doubleValue;
@NotNull
@Min(value = 1)
@Max(value = 10)
private Integer intValue;
@NotNull
@Range(min = 1,max = 10,message = "最小为1,最大为10")
private Integer range;
@NotBlank
@Email
private String email;
@NotBlank
@Size(min = 10,max = 20,message = "字符串长度在10-20之间")
private String strSize;
}
2.全局异常捕获类中添加MethodArgumentNotValidException异常捕获
/**
* 参数校验异常
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public BaseRspVo handleException(MethodArgumentNotValidException e) {
logger.error("请求参数不合法{}",e.getBindingResult());
//获取所有校验失败项
List<FieldError> errors = e.getBindingResult().getFieldErrors();
//处理异常校验项
Map<String,String> errorMap = new HashMap<>();
if(!CollectionUtils.isEmpty(errors)) {
for (FieldError error : errors) {
errorMap.put(error.getField(),error.getDefaultMessage());
}
}
BaseRspVo baseRspVo = BaseRspVo.fail(ErrorCodesEnum.PARAM_ERROR);
baseRspVo.setData(errorMap);
return baseRspVo;
}
3.测试Controller编写
/**
* 测试参数校验
* @param reqVo
* @return
*/
@PostMapping(value = "/testValidate")
public BaseRspVo testValidate(@Validated @RequestBody ValidatorReqVo reqVo){
return new BaseRspVo<>(Arrays.asList("1","2"));
}
4.模拟请求入参
{
"id": 1,
"intValue": 10,
"doubleValue": 2.2,
"future": "2019-11-21",
"range": 1,
"strSize": "2321213123",
"email": "a121@wdw.com"
}
参数校验注解参考表
| 注解 | 描述 | | - | - | |@NotNull |限制必须不为null| |@NotEmpty |验证注解的元素值不为 null 且不为空(字符串长度不为0、集合大小不为0)| |@NotBlank |验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格| |@Pattern(value) |限制必须符合指定的正则表达式| |@Size(max,min) |限制字符长度必须在 min 到 max 之间(也可以用在集合上)| |@Email |验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式| |@Max(value) |限制必须为一个不大于指定值的数字| |@Min(value) |限制必须为一个不小于指定值的数字| |@DecimalMax(value) |限制必须为一个不大于指定值的数字| |@DecimalMin(value) |限制必须为一个不小于指定值的数字| |@Null |限制只能为null(很少用)| |@AssertFalse |限制必须为false (很少用)| |@AssertTrue |限制必须为true (很少用)| |@Past |限制必须是一个过去的日期| |@Future |限制必须是一个将来的日期| |@Digits(integer,fraction)| 限制必须为一个小数,且整数部分的位数不能超过 integer,小数部分的位数不能超过 fraction (很少用)|
refer to : https://blog.csdn.net/qq_32867467/article/details/90292737