最近在javaWeb开发过程中对参数校验这块的@Validated和@Valid这两个注解的区别总是搞不懂,于是写了个Demo测试了一下。

一、对Controller层方法的参数进行校验

Controller

@RestController
@RequestMapping("/query")
public class QueryController {@Autowiredprivate QueryService queryService;//1.将校验注解加在请求参数中@PostMapping("/user")public String getUserInfo(@RequestBody @Valid TestRequest request) {return "测试通过";}
}

TestRequest

在请求体的内部加上一个校验注解@NotNull看会不会生效。

@Data
public class TestRequest {@NotNullprivate Integer id;private String username;List<User> users;
}

请求与结果

结果

在Controller层的方法的参数前面加了@Vaild之后,请求体内部的校验注解@NotNull生效。

二、对Service层的方法进行参数校验

Controller

取消Controller层的参数校验

@RestController
@RequestMapping("/query")
public class QueryController {@Autowiredprivate QueryService queryService;//1.将校验注解加在请求参数中@PostMapping("/user")public String getUserInfo(TestRequest request) {queryService.queryUser(request);return "测试通过";}
}

Service

在Service层加上参数校验。

@Service
public class QueryServiceImpl implements QueryService {@Overridepublic int queryUser(@Valid TestRequest request) {return 0;}
}

请求和结果

结果一

Service层的请求体参数前面@Valid,但是校验并没有生效,加上Service层加上@Validated注解试一试。

@Service
@Validated
public class QueryServiceImpl implements QueryService {@Overridepublic int queryUser(@Valid TestRequest request) {return 0;}
}

结果二


在Service层上面加上@Validated后校验生效。

三、结论

  • @Validated是相当于是一个开关,在类上加上这个注解代表这个类的方法会进行参数校验。
  • SoringMVC的Controller层自带一个@Validated注解的效果,所以可以不用加。
  • @Valid作用是使对象类型的参数的内部校验注解生效,如@NotNull、@NotBlank、@NotEmpty或者其他自定义校验注解。
    1.@NotNull
    适用于基本数据类型(Integer,Long,Double等等),当 @NotNull 注解被使用在 String 类型的数据上,则表示该数据不能为 Null(但是可以为 Empty)
    2.@NotBlank
    适用于 String 类型的数据上,加了@NotBlank 注解的参数不能为 Null 且 trim() 之后 size > 0
    3.@NotEmpty
    适用于 String、Collection集合、Map、数组等等,加了@NotEmpty 注解的参数不能为 Null 或者 长度为 0

四、注意点

  1. 如果Controller或者Service实现了接口,最好参数校验写在接口上,不然会报错。
  2. 如果对象参数里面还有对象参数需要校验,只需在内部对象参数上面再加上@Valid。

@Validated和@Valid的简单总结相关推荐

  1. Spring中@NotEmpty,@NotBlank,@NotNull,@Valid,@Validated注解简介及简单使用

    前言 在开发中,为了代码的稳定性不报空指针异常,经常需要判断前端传过来的值是否为空,为空的话就返回前端值为空的提示,才能进行下一步的操作 Maven依赖的引入: springboot 2.3.0 以后 ...

  2. @Validated和@Valid校验参数、级联属性、List

    @Validated和@Valid的区别 在Controller中校验方法参数时,使用@Valid和@Validated并无特殊差异(若不需要分组校验的话): @Valid:标准JSR-303规范的标 ...

  3. validated 验证数组_@Validated和@Valid的区别?校验级联属性(内部类)

    NBA里有两大笑话:一是科比没天赋,二是詹姆斯没技术.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以 ...

  4. @Validated、@Valid对比及详细用法

    文章目录 前言 @Valid和@Validated两个注解介绍及对比 @Valid: @Validated: 二者区别: Spring中bean validation由自身的校验和部分hibernat ...

  5. @Validated和@Valid校验参数

    @Validated和@Valid校验参数 参考: @Validated和@Valid校验参数.级联属性.List java valid payload_Spring Validation最佳实践及其 ...

  6. 面试:说说参数验证 @Validated 和 @Valid 的区别?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | blog.csdn.net/qq_276803 ...

  7. 参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR-303 的一个变种),javax提供了@Valid(标准J ...

  8. Spring Validation验证框架参数验证 @Validated 和 @Valid 的区别

    参数验证 @Validated 和 @Valid 的区别 Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR- ...

  9. @Validated和@Valid区别:Spring validation验证框架对入参实体进行嵌套验证必须在相应属性(字段)加上@Valid而不是@Validated...

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...

最新文章

  1. 官方文档,才是正途-docker-compose
  2. python计算3j系数_python数值基础知识浅析
  3. html5 css3 设计模式,html5+css3设计模式
  4. Brainfuck解释器(C#)
  5. python selenium 鼠标移动到指定元素,并点击对应的元素
  6. javaWeb服务详解(含源代码,测试通过,注释) ——applicationContext-Service.xml
  7. 廖雪峰mysql安装教程 pdf_使用MySQL - 廖雪峰 Python 3 教程
  8. mysql数据库后台命令备份_使用MySQL命令行备份及恢复数据库
  9. centos7更改管理员密码
  10. java memorystream 包_存储在MemoryStream中的裁剪图像中心
  11. 第五篇:你“ 看不见 ” 的隐式转换
  12. java函数调用实例_Java使用方法引用实现任意对象的实例方法
  13. shiro-cas------搭建基础cas服务器
  14. Java SE 基础:线程
  15. 奋战聊天机器人(二)语料和词汇资源
  16. 网络安全实验8 基于网络入侵检测系统
  17. r9270公版bios_换个BIOS再来一次
  18. 苹果计算机符号怎么打开,Mac电脑如何输入command(⌘)、option(⌥)、shift(⇧)等特殊符号...
  19. C语言编程入门训练(一)
  20. h软件_Qt编写软件运行时间记录

热门文章

  1. Android WebRTC 入门教程(二) -- 模拟p2p本地视频传输
  2. 华硕fl8000u是什么型号_华硕fl8000u参数 华硕顽石五代fl8000什么配置?
  3. 公网开放80、8000端口
  4. php设计模式epub,大话设计模式(pdf+epub+mobi+txt+azw3)
  5. 如何选择云服务器配置?怎么买最划算?
  6. 笔记本电脑java记事本在哪_系统自带有记事本吗_电脑自带的记事本在哪-win7之家...
  7. 数据挖掘的步骤有哪些?
  8. [Ubunut] c++段错误调试工具gdb的使用方法
  9. 台北淡水 渔人码头之行 1
  10. 如何不碌碌无为的活着?