学习分享——Spring validation验证框架


        在我们创建Springboot项目时,可以在开始时添加很多依赖项,勾选几个复选框就可以完成依赖的添加,这些依赖中的框架可以极大地提高我们的开发效率,简直是老 6 一般的存在。在做web项目开发时,我们经常会苦于去写各种分支判断去验证客户端发过来的request请求是否符合我们的业务标准及要求,各种正则表达式会让你累感不爱。那么请记住:在java中只要你觉得繁琐重复的代码,一定有大佬帮你写好了!!!在此感谢各种大佬!!!
        Validation 验证框架是  由Java EE 提供的一套api,主要用于Java bean的验证(不止于controller)javax.validation.api。我们可以在创建SpringBoot项目时勾选io>validation,如下

 当然,也可以在maven pom.xml中添加dependency,如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

        当我们需要检查请求参数时,直接在处理请求的方法的参数列表中,对需要检查的参数添加@Validated注解,表示此参数是需要通过Spring Validation进行检查的:
 

@PostMapping("/add-new")
public String addNew(@Validated ProductAddNewDTO productAddNewDTO) {
    // 省略方法体的代码 
}

同时我们还需要在数据传输类DTO中加上你需要的注解,例如:
 

@Data
public class ProductAddNewDTO implements Serializable {

    @NotNull(message = "必须提交产品名称!")
    private String name;
    @NotNull(message="必须提交产品描述")
    private String description;
    @NotNull(message = "必须提交自定义排序序号!")
    @Range(max = 99, message = "自定义排序序号必须是0~99之间的值!")
    private Integer sort;

}

同时这个框架为我们提供了强大丰富的注解,以满足我们对用户提交数据的各种要求和限制如下:

 一些注解的注意事项如下:
@Pattern:通过此注解的regexp属性配置正则表达式,并使用message配置验证失败时的提示文本
        此注解只能添加在字符串类型的属性上,

        此注解不能检查“为null”的情况,如果不允许为null,则必须同时配置@NotNull@Pattern


@Range:通过此注解的minmax属性可以指定整型数据的最小值和最大值,此注解可以和@NotNull一起使用

另外我们来看下@Validated的源码

 可以看到这个注解可以在类、方法、参数上面添加,而@NotNull @Range等注解的作用域范围就更广泛一些,这里就不贴源码了。可以自行查看
 

当Spring Validation检查不通过时,将抛出BindException,所以,可以在统一处理异常的类中对此类异常进行处理:如下

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler
    public String handleBindException(BindException e) {
    log.debug("处理BindException:{}", e.getMessage());

    StringBuilder stringBuilder = new StringBuilder();
    List<FieldError> fieldErrors = e.getFieldErrors();
    for (FieldError fieldError : fieldErrors) {
        String message = fieldError.getDefaultMessage();
        stringBuilder.append(message);
    }

    return stringBuilder.toString();
    }
}

上面e.getMessage中输出的内容有很多不便于我们查看分析的其他字段,所以利用e.getFieldErrors()获取到  当初我们在DTO类中的变量上具体设置的message内容。然后利用StringBuilder拼接  并输出到控制台。

手码不易,如转载请po原作者和链接。

仅供大家一起学习分享,如有不对之处,请各位大佬多多指教

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leon_coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值