@Validated和@Valid的区别?教你使用它完成Controller参数校验(含级联属性校验)以及原理分析【享学Spring】(下)

简介: @Validated和@Valid的区别?教你使用它完成Controller参数校验(含级联属性校验)以及原理分析【享学Spring】(下)

遗留痛点


你是否发现,虽然Spring MVC给我们提供了极其方便的数据校验方式,但是它还是有比较大的局限性的:它要求待校验的入参是JavaBean


请注意:并不一样要求是请求Body体哦,比如get请求的入参若用JavaBean接收的话,依旧能启用校验


但在实际应用中,其实我们非常多的Controller方法的方法入参是平铺的,也就是所谓的平铺参数,形如这样:


    @PutMapping("/hello/id/{id}/status/{status}")
    public Object helloGet(@PathVariable Integer id, @PathVariable Integer status) {
      ...
        return "hello world";
    }


其实,特别是get请求的case,@RequestParam入参一般是非常多的(比如分页查询),难道对于这种平铺参数的case,我们真的是能通过人肉if else的去校验吗?

兴许你对此问题有兴趣,那就参阅本文吧,它能给你提供解决方案:【小家Spring】让Controller支持对平铺参数执行数据校验(默认Spring MVC使用@Valid只能对JavaBean进行校验)


@Validated和@Valid的区别


如题的问题,我相信是很多小伙伴都很关心的一个对比,若你把这个系列都有喵过,那么这个问题的答案就浮出水面了:


  1. @Valid:标准JSR-303规范的标记型注解,用来标记验证属性和方法返回值,进行级联和递归校验
  2. @Validated:Spring的注解,是标准JSR-303的一个变种(补充),提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制
  3. 在Controller中校验方法参数时,使用@Valid和@Validated并无特殊差异(若不需要分组校验的话)
  4. @Validated注解可以用于类级别,用于支持Spring进行方法级别的参数校验。@Valid可以用在属性级别约束,用来表示级联校验。
  5. @Validated只能用在类、方法和参数上,而@Valid可用于方法、字段、构造器和参数上



最后提示一点:Spring Boot的Web Starter已经加入了Bean Validation以及实现的依赖,可以直接使用。但若是纯Spring MVC环境,请自行导入~


总结


本文介绍的是我们平时使用得最多的数据校验场景:使用@Validated完成Controller的入参校验,实现优雅的处理数据校验。同时希望通过本文能让你彻底弄懂@Validated和@Valid使用上的区别以及联系,在实际生产使用中能够做到更加的得心应手~

相关文章
|
15天前
|
Java 数据库连接 Spring
Spring Boot命令行启动添加参数
Spring Boot命令行启动添加参数
|
1月前
|
XML Java 数据库连接
spring boot 参数的过滤注解与实战
在Spring Boot应用中,对于入参的过滤,通常会涉及到对Web层的数据验证和处理。Spring Boot借助Spring框架提供了强大的验证框架支持,主要基于JSR-303/JSR-380(Bean Validation API)规范,以及Spring自身的@Valid或@Validated注解来实现请求参数的验证。以下是一些常见的使用案例来展示如何对参数进行过滤和验证。
29 1
|
1月前
|
XML Java 开发者
Spring Boot中的bean注入方式和原理
Spring Boot中的bean注入方式和原理
52 0
|
26天前
|
安全 Java 数据安全/隐私保护
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
57 1
|
26天前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
60 0
|
4天前
|
JSON Java 数据格式
Spring Boot实现各种参数校验
这些是Spring Boot中实现参数校验的一些常见方法,你可以根据项目需求选择适合的方式来进行参数校验。
11 0
|
8天前
|
XML Java C++
【Spring系列】Sping VS Sping Boot区别与联系
【4月更文挑战第2天】Spring系列第一课:Spring Boot 能力介绍及简单实践
【Spring系列】Sping VS Sping Boot区别与联系
|
12天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
21 1
|
27天前
|
XML 缓存 Java
天天用 Spring,bean 实例化原理你懂吗
天天用 Spring,bean 实例化原理你懂吗
17 0
|
1月前
|
前端开发 Java Spring
Java 新手如何使用Spring MVC 中的查询字符串和查询参数
Java 新手如何使用Spring MVC 中的查询字符串和查询参数