小熙最近看项目,遇到不少之前没有用过的注解,特此查找大佬们的心得记录下,并与大家共享。

@Valid

@Valid注解用于校验,所属包为:javax.validation.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 中的"密码不能为空"返回。

例子二:

①: 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于User类中的属性):

 @Min(value = 18,message = "年龄不合法")private Integer age;

② : 其次在controller层的方法的要校验的参数上添加@Valid注解,并且需要传入BindingResult对象,用于获取校验失败情况下的反馈信息,如下代码:

 @PostMapping("/users")public User addUser(@RequestBody @Valid User user, BindingResult bindingResult) {if(bindingResult.hasErrors()){System.out.println(bindingResult.getFieldError().getDefaultMessage());return null;}return userResposity.save(user);}

bindingResult.getFieldError.getDefaultMessage()用于获取相应字段上添加的message中的内容,如:@Min注解中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注解详解

    @Valid 用于验证注解是否符合要求,直接加在变量user之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息. @RestController@Reque ...

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

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

  3. java切面不需要接口了吗_详解Spring AOP 实现“切面式”valid校验

    why: 为什么要用aop实现校验? answer: spring mvc 默认自带的校验机制 @Valid + BindingResult, 但这种默认实现都得在Controller方法的中去接收B ...

  4. @Valid的用法详解

    @Valid 注解通常用于对象属性字段的规则检测,具体啥意思,下面让我娓娓道来: 下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 注解用法详解. 那么,首先,我们会有一 ...

  5. springboot @Valid 注解用法详解

    @Valid 注解通常用于对象属性字段的规则检测,具体啥意思,下面让我娓娓道来: 下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 注解用法详解. 那么,首先,我们会有一 ...

  6. @Valid 和 @Validated 注解用法详解

    目录 案例引入 @Valid 详解 @Validated 详解 @Valid 和 @Validated 比较 案例引入 下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid ...

  7. ORB-SLAM2代码/流程详解

    ORB-SLAM2代码详解 文章目录 ORB-SLAM2代码详解 1. ORB-SLAM2代码详解01_ORB-SLAM2代码运行流程 1 运行官方Demo 1.2. 阅读代码之前你应该知道的事情 1 ...

  8. hadoop作业初始化过程详解(源码分析第三篇)

    (一)概述 我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程.在作业到达JobTracker之后初始化之前,JobTracker会通过submit ...

  9. CENTOS7 高性能Linux集群 通过yum进行 haproxy配置 !安装 !使用!HAProxy配置文件详解

    Haproxy配置 永久修改名字:便于区分虚拟机! Haproxy:hostnamectl set-hostname haproxy Web1: hostnamectl set-hostname WE ...

最新文章

  1. Jenkins进阶系列之——01使用email-ext替换Jenkins的默认邮件通知
  2. 微软向马斯克的人工智能项目OpenAI投资10亿美元
  3. seo自动发布外链工具_没资源、零经验,如何建立高质量外链?
  4. jboss eap_HawtIO在JBoss EAP上(第二部分)
  5. 视频剪辑用i7,8600还是r5,3600好些?
  6. android mmkv使用_锦囊篇|一文摸懂SharedPreferences和MMKV(一)
  7. 解决apicloud中真机同步海马玩模拟器中每次都要升级apploader的问题
  8. 深度学习:透过神经网络的内在灵魂与柏拉图的哲学理念
  9. html5 梵高 星,上海梵高星空艺术馆门票
  10. 定值保险计算举例_保险中生命表的计算例题 定值保险和不定值保险计算例题...
  11. 优格筑家 引领高档家装!
  12. OpenCV 颜色检测| color detection
  13. 小型气象站种类有哪些
  14. 余世维《有效沟通》听课笔记
  15. ndk编译 错误:dlopen failed:cannot locate symbol 一个符号 referenced by 你的库.so/.a lang.UnsatisfiedLinkErr
  16. STM32实现LED闪烁
  17. Strlen和Sizeof的区别
  18. 怎么交c语言课堂作业,C语言第四次作业课堂
  19. 二维码智能巡检系统让电站设备巡检更智能
  20. 加密货币--Cryptocurrency

热门文章

  1. react 购物车组件
  2. AVFrame结构体中变量解释
  3. 百度OCR识别图片文字,解决image format error错误
  4. http 返回码 405 解决方案之一
  5. 墨者Bash漏洞分析溯源题解
  6. matlab simulink 汽车abs模糊pid控制和pid控制对比
  7. 无人驾驶公司实力排名---自动驾驶初创企业排名(roadstar.ai、pony.ai、momenta、景驰和驭势科技等)
  8. 字符串截取函数 substr
  9. 算法导论------递归算法的时间复杂度求解
  10. 灰度值阈值设置matlab,基本全局阈值法(basic global thresholding)MATLAB实现