JSR303是干嘛的 及简单的学习使用

一、JSR303是什么:

JSR303是Java为Bean数据合法性校验提供给的标准框架

二、为什要用JSR303:

在实际开发中,除了前端需要在表单中验证用户的输入。后台服务也需要对用户传入的参数进行效验,避免他人在得知请求格式后,直接通过类似Postman这样的测试工具进行非常数据请求。

三、快速入门步骤:

1、给Bean添加校验注解:javax.validation.constraints,并定义自己的message提示

a、添加依赖
        <dependency>
            <groupId>jakarta.validation</groupId>
            <artifactId>jakarta.validation-api</artifactId>
        </dependency>
 b、添加注解

2、在controller中需要验证的请求开启校验功能 @Valid

      效果: 校验错误以后会有默认的响应;


3、给校验的bean后紧跟一个BindingResult,就可以获取到校验的结果

这样就可以自己定义返回数据了

4、使用Apifox(跟postman差不多的请求工具)模拟请求:

成功进行数据效验!

四、更多注解的介绍

 扩展:

一、分组效验

1、创建两个借口,里面可以不用写什么内容

2、给效验注解标注什么情况需要进行效验,并标记接口分组

3、在controller中将 @Valid 改成 @Validated()  括号内填写需要校验的组别

使用了分组效验,默认没有指定分组的校验注解@NotBlank,在分组校验情况下不生效,只会在@Validated生效,就是没有指定任何分组的时候才生效。

二、自定义效验

1、编写一个自定义的校验注解

2、模仿其他注解,编写一个自定义的校验器
@Documented
@Constraint(validatedBy = {})
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ListStatus {
    String message() default "{com.qiu07.common.valid.ListStatus.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    int[] Vals()  default {};
}
3、建一个配置文件,自定义返回消息

 

4、自定义一个ConstraintValidator<>的实现类ListValueConstraintValidator
public class ListValueConstraintValidator implements ConstraintValidator<ListStatus,Integer> {
    private Set<Integer> set =new HashSet<>();
//    初始化方法
    @Override
    public void initialize(ListStatus constraintAnnotation) {
        int[] vals = constraintAnnotation.Vals();
        for(int val : vals){
            set.add(val);
        }
    }

//    判断是否效验成功方法
    @Override
    public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) {
        return set.contains(integer);
    }
}
5、将ListValueConstraintValidator加入到注解    @Constraint    完善自定义的效验器
@Documented
@Constraint(validatedBy = {ListValueConstraintValidator.class})
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ListStatus {
    String message() default "{com.qiu07.common.valid.ListStatus.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    int[] Vals()  default {};
}

@Constraint(validatedBy = {ListValueConstraintValidator.class},可以指定多个不同的校验器,适配不同的效验)

6、测试,返回到了正确的效验相应数据

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值