05-SpringBoot-自定义校验

需求

在某个接口的请求参数上有如下限制:

参数名称说明类型是否必须备注
state发布状态string已发布 | 草稿

自定义注解State

// 元注解:将注解中的元素包含到Javadoc中去
@Documented
// 元注解:运用的地点
@Target({ElementType.FIELD})
// 元注解:存活时间
@Retention(RetentionPolicy.RUNTIME)
// 指定提供校验规则的类
@Constraint(validatedBy = {StateValidation.class})
public @interface State {
    // 提供校验失败后的提示信息
    String message() default "state参数的值只能是已发布或草稿";

    // 指定分组
    Class<?>[] groups() default {};

    // 负载 获取到State注解的附加信息
    Class<? extends Payload>[] payload() default {};
}

自定义校验数据的类StateValidation

public class StateValidation implements ConstraintValidator<State, String> {
    /**
     *
     * @param value 将来要校验的数据
     * @param constraintValidatorContext
     * @return 返回false则校验不通过, 返回true则校验通过
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        // 提供校验规则
        if (value == null) {
            return false;
        }
        if (value.equals("已发布") || value.equals("草稿")) {
            return true;
        }
        return false;
    }
}

在需要校验的地方使用自定义注解

  • 校验对象类型:

    实体类的成员变量上添加校验注解@NotNull@NotEmpty@Email,接口方法的实体类参数上添加@Validated注解

  • 校验简单数据类型:

    在控制器上添加@Validated注解,在接口方法的简单数据类型参数前面添加校验注解@NotNull@NotEmpty@Email

	@State
    private String state;//发布状态 已发布 |草稿
@Data
public class Article {
    private Integer id;//主键ID
    @NotEmpty
    @Pattern(regexp = "^\\S{1,10}$")
    private String title;//文章标题
    @NotEmpty
    private String content;//文章内容
    @NotEmpty
    @URL
    private String coverImg;//封面图像
    @State
    private String state;//发布状态 已发布 |草稿
    @NotNull
    private Integer categoryId;//文章分类id
    private Integer createUser;//创建人ID
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间
}
@RestController
@RequestMapping("/article")
public class ArticleController {

    @Autowired
    private ArticleService articleService;

    // 新增文章
    @PostMapping
    public Result add(@RequestBody @Validated Article article) {
        articleService.add(article);
        return Result.success();
    }
}
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值