SpringBoot注解@validated实战
@validated说明
@validated是SpringBoot中已经集成好的注解,在SpringBoot项目中直接使用该注解对接口参数进行校验,如果校验不通过会统一抛出异常,需要跟统一异常配套使用(不是必须,但是强烈建议使用,否则抛出莫名其妙的错误信息容易让前端同事乱棍打死)。
配套使用的注解
配套使用的注解用于实体类的属性字段,常用的大概有以下这些。
注解 | 说明 |
---|---|
@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格式 |
代码示例
1、先在实体类中把需要验证的属性加上对应的注解,注解中的message是属性验证不通过的报错信息,groups则是自定义的接口分组,具体的使用场景是不同接口可以指定一个group属性来区分不同的校验字段。
// An highlighted block
@Data
@ApiModel("主数据系统-要素传输对象")
@NoArgsConstructor
public class ElementDto implements Serializable {
@ApiModelProperty("id")
@NotBlank(message = "id不能为空", groups = {UpdateElement.class})
private String id;
@NotBlank(message = "编码不能为空", groups = {AddElement.class, DelElement.class})
private String code;
}
2、@validated启用属性验证。
@PostMapping(name = "xxx", value = "/element/add")
@ResponseBody
public Xxx addElement(@RequestBody @Validated(ElementDto.AddElement.class) ElementDto elementDto) {
return null;
}
@PostMapping(name = "xxx", value = "/element/modify")
@ResponseBody
public Xxx modifyElement(@RequestBody @Validated(ElementDto.UpdateElement.class) ElementDto elementDto) {
return null;
}
总结
通过这个注解可以减少绝大部分接口参数验证代码,让开发人员更专注的进行业务逻辑开发,之后发现其它的比较高效的注解再分享给大家。