问题
在接口入参为实体时,实体的有些属性是必传的,不能为空,如何在controller层校验,对非法入参进行拦截呢?
解决
使用validation包中的注解在实体中进行配置。
import javax.validation.constraints.*;
示例
以key、value不能为空举例。
实体定义
在不能为空的属性上增加@NotNull注解
import lombok.Builder;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Data
@Builder
public class ValidationDemo implements Serializable {
private static final long serialVersionUID = 4673931777866766314L;
private Integer id;
@NotNull
private String key;
@NotNull
private String value;
}
接口定义
在需要进行合法性校验的接口入参上增加注解@Validated
public int insertSelective(@Validated @RequestBody ValidationDemo validationDemo) {
...
}
validation常用注解汇总
Constraint | 详细信息 |
---|---|
@Null | 被注释的元素必须为 null |
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@AssertFalse | 被注释的元素必须为 false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max, min) | 被注释的元素的大小必须在指定的范围内 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |