• @Valid 用于验证注解是否符合要求,直接加在变量user之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。
@RestController@RequestMapping("/user")public class UserController {@PostMappingpublic User create (@Valid @RequestBody User user) {System.out.println(user.getId());System.out.println(user.getUsername());System.out.println(user.getPassword());user.setId("1");return user;}}
  • 然后在 User 类中添加验证信息的要求:
public class User {private String id;@NotBlank(message = "密码不能为空")private String password;}

​@NotBlank 注解所指的 password 字段,表示验证密码不能为空,如果为空的话,上面 Controller 中的 create 方法会将message 中的"密码不能为空"返回。

当然也可以添加其他验证信息的要求:

限制 说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
  • 除此之外还可以自定义验证信息的要求,例如下面的 @MyConstraint:
public class User {private String id;@MyConstraint(message = "这是一个测试")private String username;}
  • 注解的具体内容:
@Constraint(validatedBy = {MyConstraintValidator.class})@Target({ELementtype.METHOD, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public @interface MyConstraint {String message();Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};}
  • 下面是校验器:
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {@Autowiredprivate UserService userService;@Overridepublic void initialie(@MyConstraint constarintAnnotation) {System.out.println("my validator init");}@Overridepublic boolean isValid(Object value, ConstraintValidatorContext context) {userService.getUserByUsername("seina");System.out.println("valid");return false;}}

@Valid注解详解相关推荐

  1. @Valid 注解详解 Java Bean Validation的前世今生

    Spring @Valid 注解 校验实体属性 1 @Valid 介绍 1.1 前言 1.2 Bean Validation 1.3 关于validation包 1.3 关于Spring Hibern ...

  2. spring-boot注解详解(一)

    spring-boot注解详解(一) @SpringBootApplication @SpringBootApplication = (默认属性)@Configuration + @EnableAut ...

  3. Hibernate Validation校验注解详解

    在前后端传递数据的时候,往往后端需要校验传递数据的格式,比如用户名的格式,密码是否为空.我们可以在service层编写代码判断,但是当我们在多处需要校验传递来的数据的时候,就会出现大量重复的代码,一旦 ...

  4. SpringMVC学习:控制层(Controller)基于注解详解

    文章目录 一.URL映射Controller的方法返回值 二.SpringMVC各类注解详解 (一) @Controller (二) @RequestMapping 1.基本用法 2. path属性或 ...

  5. 26.SpringBoot事务注解详解

    转自:https://www.cnblogs.com/kesimin/p/9546225.html @Transactional spring 事务注解 1.简单开启事务管理 @EnableTrans ...

  6. mybatis注解详解

    mybatis注解详解 首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则 ...

  7. 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  8. Spring零配置之@Configuration注解详解

    转载自 Spring零配置之@Configuration注解详解 @Configuration介绍 Spring3.0之前要使用Spring必须要有一个xml配置文件,这也是Spring的核心文件,而 ...

  9. Spring Boot注解详解

    文章目录 使用注解的优势 注解详解(配备了完善的释义) 注解列表如下 JPA注解 springMVC相关注解 全局异常处理 项目中具体配置解析和使用环境 使用注解的优势 采用纯java代码,不在需要配 ...

最新文章

  1. Android被逼学习例子2
  2. 主要技术指标简介_期货常用技术指标(五)布林线
  3. OSI七层模型的作用
  4. linux下python开发工具_Python开发工具 Wing IDE
  5. VC++ 结束线程 AfxBeginThread AfxEndThread
  6. opencv python3 找图片不同_使用OpenCV和Python查找图片差异
  7. java伪随机数(菜鸟教程)
  8. c语言观察程序流程图,程序流程图的画法
  9. Unity新手开发VR项目
  10. 布兰迪斯大学计算机美国大学排名,布兰迪斯大学排名多少 美国和世界排名介绍...
  11. IjkVideoView的视频宽高比怎么设置
  12. 西门子TIA V17发布,附下载链接<EKB>
  13. 金蝶协同办公平台任意文件下载漏洞(无需登录)
  14. move_base学习(一)之双激光差动式移动机器人导航仿真
  15. 宽带不能上传发文件_光纤宽带和普通宽带的区别
  16. Python 爬虫之urllib库的使用
  17. 泡沫经济中的移动开发者
  18. 【转载】2019 年,国内博士后的招聘要求和待遇是怎样的?
  19. 侠客风云传服务器维护,侠客风云传开服表
  20. 计算机没法安装打印程序,无法安装打印机怎么办 无法安装打印机解决方法【图文教程】...

热门文章

  1. 饼状图改变数据显示位置_Tableau--饼图大作战
  2. Python分布式爬虫1
  3. TensorFlow2.0:张量的数学运算
  4. 分享一个不错的Windows软件——Fliqlo
  5. 用JavaScript刷leetcode(刷题 第一天)
  6. Splash广告界面
  7. python教材答案第四章_python核心编程课后习题解答第四章
  8. 接口安全怎么处理_压瓦机设备噪声大怎么处理及压瓦机的安全使用
  9. C语言编程时没思路,c语言编程问题
  10. 若依如何配置允许跨域访问?