Validation概念及作用
一、简介
数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中,如果数据库中出现一个非法的邮箱格式,也会让运维人员头疼不已。可以使用本文将要介绍的validation来对数据进行校验。
二、常用注解
注解 | 作用 |
---|---|
@Null | 限制只能为null |
@NotNull | 限制必须不为null |
@NotEmpty | 只作用于字符串类型,字符串不为空,并且长度不为0 |
@NotBlank | 只作用于字符串类型,字符串不为空,并且trim()后不为空串 |
@AssertFalse | 限制必须为false |
@AssertTrue | 限制必须为true |
@DecimalMax(value) | 限制必须为一个不大于指定值的数字 |
@DecimalMin(value) | 限制必须为一个不小于指定值的数字 |
@Digits(integer,fraction) | 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction |
@Future | 限制必须是一个将来的日期 |
@Past 验证注解的元素值 | (日期类型)比当前时间早 |
@Max(value) | 限制必须为一个不大于指定值的数字 |
@Min(value) | 限制必须为一个不小于指定值的数字 |
@Pattern(value) | 限制必须符合指定的正则表达式 |
@Size(max,min) | 限制字符长度必须在min到max之间 |
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 |
三、使用场景
1、在接口字段参数上直接使用
在方法字段参数上直接用对应的注解即可
@RestController
@RequestMapping("/tracemain")
public class TraceMainController {
@PostMapping("/save")
public ResponseEntity<TraceMainSaveOutVo> saveTraceMain(
@NotNull(message = "type字段不能为空") Integer type) {
// xxxx
return ResponseEntity.success(traceMainSaveOutVo);
}
}
2、在对象上使用
Controller方法中对象前面添加 @Validated 注解,VO对象里面字段上面添加对应注解即可
如下代码
@RestController
@RequestMapping("/tracemain")
public class TraceMainController {
@PostMapping("/save")
public ResponseEntity<TraceMainSaveOutVo> saveTraceMain(@RequestBody @Validated TraceMainSaveInVo traceMainSaveInVo) {
// xxxx
return ResponseEntity.success(traceMainSaveOutVo);
}
}
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TraceMainSaveInVo extends SysModel {
private static final long serialVersionUID = -1826896482893289340L;
@ApiModelProperty("物流唯一单号")
@NotBlank(message = "物流唯一单号不能为空")
private String logisticsUniqueNo;
@ApiModelProperty("HQ跟踪单号,格式为:HQ1+19位数字")
@Pattern(regexp = "^HQ1+\\d{19}", message = "HQ跟踪单号格式有误,格式为:HQ1+19位数字")
@Size(min = 22, max = 22, message = "HQ跟踪单号格式有误, 格式为:HQ1+19位数字")
private String hqTraceNo;
@ApiModelProperty("预报来源: 1-WMS,2-LMS, 3-1track")
@NotNull(message = "预报来源不能为空")
@Min(value = 1, message = "预报来源的值只能为1,2,3")
@Max(value = 3, message = "预报来源的值只能为1,2,3")
private Integer predictSource;
}
3、在嵌套对象使用
Controller类上添加 @Validated 注解,方法参数上添加 @Valid 注解,VO对象里面字段上面添加对应注解即可 ;
代码如下:
@RestController
@RequestMapping("/xxx")
@Validated
public class PredictController {
@PostMapping("/save")
public ResponseEntity<List<PredictOutVo>> saveOrUpdatePredict(@RequestBody @Valid List<PredictInVo> predictInVoList) {
// xxx
return ResponseEntity.success(predictOutVoList);
}
}
public class PredictInVo extends SysModel {
@NotBlank(message = "OMS订单编号oms_order_no不能为空")
private String omsOrderNo;
}