每篇一句

NBA里有两大笑话:一是科比没天赋,二是詹姆斯没技术

相关阅读

【小家Java】深入了解数据校验:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例
【小家Spring】让Controller支持对平铺参数执行数据校验(默认Spring MVC使用@Valid只能对JavaBean进行校验)
【小家Spring】Spring方法级别数据校验:@Validated + MethodValidationPostProcessor优雅的完成数据校验动作


对Spring感兴趣可扫码加入wx群:`Java高工、架构师3群`(文末有二维码)

前言

上篇文章 介绍了Spring环境下实现优雅的方法级别的数据校验,并且埋下一个伏笔:它在Spring MVCController层)里怎么应用呢?本文为此继续展开讲解Spring MVC中的数据校验~

可能小伙伴能立马想到:这不一样吗?我们使用Controller就是方法级别的,所以它就是直接应用了方法级别的校验而已嘛~对于此疑问我先不解答,而是顺势再抛出两个问题你自己应该就能想明白了:

  1. 上文有说过,基于方法级别的校验Spring默认是并未开启的,但是为什么你在Spring MVC却可以直接使用@Valid完成校验呢?
    1. 可能有的小伙伴说他用的是SpringBoot可能默认给开启了,其实不然。哪怕你用的传统Spring MVC你会发现也是直接可用的,不信你就试试
  2. 类比一下:Spring MVCHandlerInterceptorAOP思想的实现,但你有没有发现即使你没有启动@EnableAspectJAutoProxy的支持,它依旧好使~

若你能想明白我提出的这两个问题,下文就非常不难理解了。当然即使你知道了这两个问题的答案,还是建议你读下去。毕竟:永远相信本文能给你带来意想不到的收获~

使用示例

关于数据校验这一块在Spring MVC中的使用案例,我相信但凡有点经验的Java程序员应该没有不会使用的,并且还不乏熟练的选手。在此之前我简单“采访”过,绝大多数程序员甚至一度认为Spring中的数据校验就是指的在Controller中使用@Validated校验入参JavaBean这一块~

因此下面这个例子,你应该一点都不陌生:

@Getter @Setter @ToString public class Person {      @NotNull     private String name;     @NotNull     @Positive     private Integer age;      @Valid // 让InnerChild的属性也参与校验     @NotNull     private InnerChild child;      @Getter     @Setter     @ToString     public static class InnerChild {         @NotNull         private String name;         @NotNull         @Positive