开发过程中接口请求参数 POST 类型请求都已实体来接受参数,很多不靠谱的前端拿到接口用样例请求就发送到后台中,经常 ‘空指针‘ ,该如何对实体类型请求参数进行校验呢
原文来自:Java学习者社区
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
</dependency>
注解 | 说明 |
---|---|
@Length(min=,max=) | 检查所属的字段长度是否在min和maz之间,只能用字符串 |
@Range(min=,max=,message=) | 被注释的元素必须在合适的范围 |
@Max | 该字段的值只能小于或等于最大值 |
@Min | 该字段值只能大于或等于最小值 |
@NotNull | 不能为null |
@NotBlank | 不能为空,检查时会将空格忽略 |
@NotEmpty | 不能为空,这里的空是指空字符串 |
@Pattern(regex=,flag=) | 必须符合正则表达式 |
需要在Controller层中搭配 @Validated 或者 @Valid 注解一起使用, @Validated 和 @Valid 区别不大
注解 | @Validated | @Valid |
---|---|---|
所属的包 | 属于org.springframework.validation.annotation,属于spring 提供 | 属于javax.validation包下是JDK提供的 |
是否支持分组和排序 | 是 | 否 |
实体使用样例
public class DataSetSaveVO {
//唯一标识符为空
@NotBlank(message = "user uuid is empty")
//用户名称只能是字母和数字
@Pattern(regexp = "^[a-z0-9]+$", message = "user names can only be alphabetic and numeric")
@Length(max = 48, message = "user uuid length over 48 byte")
private String userUuid;
//数据集名称只能是字母和数字
@Pattern(regexp = "^[A-Za-z0-9]+$", message = "data set names can only be letters and Numbers")
//文件名称过长
@Length(max = 48, message = "file name too long")
//文件名称为空
@NotBlank(message = "file name is empty")
private String name;
//数据集描述最多为256字节
@Length(max = 256, message = "data set description length over 256 byte")
//数据集描述为空
@NotBlank(message = "data set description is null")
private String description;
}
Controller层的使用
@PostMapping
public ResponseVO createDataSet(@Valid @RequestBody DataSetSaveVO dataSetVO) {
return ResponseUtil.success(dataSetService.saveDataSet(dataSetVO));
}
原文:https://www.cnblogs.com/syer/p/15015436.html