Java @Validated遇到的大坑与处理

目录
  • Java @Validated 遇到的大坑
  • Validated注解使用
    • 如果为空时的报错如下
    • 空检查
    • Booelan检查
    • 长度检查
    • 日期检查
    • 数值检查

Java @Validated 遇到的大坑

我在一个Controller内,在两个方法内使用@Validated,这是两个POST方法会进入的方法,这两个方法的实体类的命名(下图红框内容)不能一样,一样的话就会导致第二个在页面显示不出来错误信息(第一个可以正常显示),下图中的1和3名字不能一样,2和4名字不能一样,当出现一样的情况的时候就会导致页面显示不出错误信息

Validated注解使用

如果要进行合法性校验的操作,在类上必须加上@Validated注解

在需要校验的参数上,可以使用以下进行校验:

以下的每一个注解都有一个message属性,用于指定错误原因

例如:

@NotNull(message = "不能为空!!!")
private String firstName;

如果为空时的报错如下

  • Property:person.firstName
  • Value:null
  • Reason:不能为空!!!

空检查

  • @Null:验证对象是否为null
  • @NotNull:验证对象是否不为null, 无法查检长度为0的字符串
  • @NotBlank:检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
  • @NotEmpty:检查约束元素是否为NULL或者是EMPTY.

Booelan检查

  • @AssertTrue:验证 Boolean 对象是否为 true
  • @AssertFalse:验证 Boolean 对象是否为 false

长度检查

  • @Size(min=, max=):验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
  • @Length(min=, max=):Validates that the annotated string is between min and max included.

日期检查

  • @Past:验证 Date 和 Calendar 对象是否在当前时间之前
  • @Future:验证 Date 和 Calendar 对象是否在当前时间之后
  • @Pattern:验证 String 对象是否符合正则表达式的规则

数值检查

建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null

  • @Min:验证 Number 和 String 对象是否大等于指定的值
  • @Max:验证 Number 和 String 对象是否小等于指定的值
  • @DecimalMax:被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
  • @DecimalMin:被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
  • @Digits:验证 Number 和 String 的构成是否合法
  • @Digits(integer=,fraction=):验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
  • @Range(min=, max=):检查带值是否介于(包括)指定的最小值和最大值之间。
  • @Valid:递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
  • @CreditCardNumber:信用卡验证
  • @Email:验证是否是邮件地址,如果为null,不进行验证,算通过验证。
  • @ScriptAssert(lang= ,script=, alias=)
  • @URL(protocol=,host=, port=,regexp=, flags=)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用注解@Validated和BindingResult对入参进行非空校验方式

    目录 注解@Validated和BindingResult对入参非空校验 @Validated 和 BindingResult 使用遇到的坑 注解@Validated和BindingResult对入参非空校验 在项目当中少不了入参校验,服务器和浏览器互不信任,不能因为前端加入参判断了后台就不处理了,这样是不对的. 比如前台传过来一个对象作为入参参数,这个对象中有些属性允许为空,有些属性不允许为空.那么你还在使用if()else{}进行非空判断吗?不妨尝试下使用注解,可以使用@Validated和

  • 解决@Validated注解无效,嵌套对象属性的@NotBlank无效问题

    目录 @Validated注解无效,嵌套对象属性的@NotBlank无效 步骤 内层对象无法验证 @Validated注解不生效问题.如何使用 1.需要引入的包 2.将@Validated打在controller中需要验证的实体类前面 3.在具体实体类中定义字段的验证规则 4.数据格式校验 在controller中的方法中进行单个参数校验注意事项 @Validated注解无效,嵌套对象属性的@NotBlank无效 最近在做的公司项目是一个表单系统,刚好要用到@Validated注解来对表单字段进

  • 使用@Validated和@Valid 解决list校验的问题

    目录 @Validated和@Valid 解决list校验 @validated验证List参数 写了个接口 ValidList @Validated和@Valid 解决list校验 在 Controller 类上 加上@Validated.在需要校验的参数上加上 @Valid . 就可以校验list里的实体类的属性 @validated验证List参数 写了个接口 @GetMapping("/do") public int doSth(@RequestBody @Validated(

  • @Validated和@Valid三种异常捕获处理方式

    目录 @Validated和@Valid异常捕获 异常共三种 @Valid和@Validated区别 注解位置 @Validated和@Valid异常捕获 异常共三种 BindException:表单提交有效,对于以json格式提交将会失效 MethodArgumentNotValidException:前段以json格式有效 ConstraintViolationException :参数上加@RequestParam或参数加@NotBlank @NotNull等 @Valid和@Valida

  • Java使用@Validated注解进行参数验证的方法

    目前项目中大部分代码进行参数验证都是写代码进行验证,为了提升方便性和代码的简洁性,所以整理了下使用注解进行参数验证.使用效果如下: // 要验证的实体类 @Data public class User implements Serializable { @NotBlank(message = "id不能为空!",groups = Update.class) protected String id = ""; @NotBlank(message = "商户i

  • 快速校验实体类时,@Valid,@Validated,@NotNull注解无效的解决

    目录 校验实体类参数内容不能为空时使用注解校验无效 使用@valid注解首先引入依赖 1.更换方法入参类型 2.错误内容过多 3.使用对象接收错误内容,按自己要求输出 springboot 校验机制 @Validated @Valid 1.探究原因 2.使用@Validated 实现校验机制 3.使用@Valid 实现校验机制 校验实体类参数内容不能为空时使用注解校验无效 使用@valid注解首先引入依赖 如果是SpringBoot项目,引入web开发包,就不需要再单独引入@valid依赖了.因

  • Java @Validated遇到的大坑与处理

    目录 Java @Validated 遇到的大坑 Validated注解使用 如果为空时的报错如下 空检查 Booelan检查 长度检查 日期检查 数值检查 Java @Validated 遇到的大坑 我在一个Controller内,在两个方法内使用@Validated,这是两个POST方法会进入的方法,这两个方法的实体类的命名(下图红框内容)不能一样,一样的话就会导致第二个在页面显示不出来错误信息(第一个可以正常显示),下图中的1和3名字不能一样,2和4名字不能一样,当出现一样的情况的时候就会

  • Java Validated 分组校验的使用

    目录 1.新建SpringBoot项目 2.新建组 3.新建请求对象 4.接口测试 5.结论 前言: 开发中我们会遇到多个接口公用一个请求对象的情况,如果需求变更,势必会破坏已有代码的逻辑,不符合开闭原则,对参数校验修修补补,不如一开始就划分明确,所以在这里记录下分组校验注解@Validated的使用. 测试过程: 1.新建SpringBoot项目 新建一个SpringBoot项目,新建module -> 引入依赖 -> 编写主启动类 -> 编写配置文件 -> 新建各种包 2.新建

  • Spring boot配置绑定和配置属性校验的方式详解

    目录 配置绑定 先建立数据配置文件 application.yml @ConfigurationProperties @Value 第一种 @Value(“${}”) 第二种@Value(“#{}”) @PropertySource 配置属性校验 @Value 与 @ConfigurationProperties对比 1. 使用位置不同 2. 功能不同 3. 松散绑定支持不同 4. SpEL 支持不同 5. 复杂类型封装 6.属性校验 7. 应用场景不同 配置绑定 所谓配置绑定”就是把配置文件中

  • java中日期格式化的大坑

    前言 我们都知道在java中进行日期格式化使用simpledateformat.通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中微小的坑吗? yyyy 和 YYYY 示例代码 @Test public void testWeekBasedYear() { Calendar calendar = Calendar.getInstance(); // 2019-12-31 calendar.set(2019, Calendar.DECEMBER, 31); Date strDate1

  • Java中的Valid和Validated的比较内容

    如果要添加接口校验,需要 1,在接口方法中请求参数前面添加@Valid注解,不需要在接口的实现类上添加@Valid注解,也不需要@Validated注解: addAnimal(@Valid Animal a) 2,在请求对象类的每个要校验的字段上添加@Valid注解,也不需要在类上添加@Validated注解: public class Animal{ @Valid @NotEmpty private String name; } Validated是Spring对javax.validatio

  • Java中Validated、Valid 、Validator区别详解

    目录 1. 结论先出 JSR 380 Valid VS Validated 不同点? Validator 2. @Valid和​​​​​​​@Validated 注解 3. 例子 4.使用@Valid嵌套校验 5. 组合使用@Valid和@Validated 进行集合校验 6. 自定义校验 自定义约束注解 工作原理 结论 参考链接: 1. 结论先出 Valid VS Validated 相同点 都可以对方法和参数进行校验 @Valid和@Validated 两种注释都会导致应用标准Bean验证.

  • Java中的三种校验注解的使用(@Valid,@Validated和@PathVariable)

    目录 @Valid和@Validated @Valid和@Validated比较 @Valid高级使用 @Valid级联校验 @Validated高级使用 @Validated分组校验 @Validated分组校验顺序 @Validated非实体类校验 @PathVariable 正则表达式校验 继承BasicErrorController类 自定义校验注解 @Valid和@Validated @Valid和@Validated比较 相同点: @Valid注解和 @Validated注解都是开启

  • Java编程中的一些常见问题汇总

    本文列举了我在周围同事的Java代码中看到的一些比较典型的错误.显然,静态代码分析(我们团队用的是qulice)不可能发现所有的问题,这也是为什么我要在这里列出它们的原因. 如果你觉得少了什么,请不吝赐教,我会很乐意把它们加上. 下面列出的所有这些错误基本都与面向对象编程有关,尤其是Java的OOP. 类名 读下这篇短文"什么是对象".类应该是真实生活中的一个抽象实体,而不是什么"validators","controller", "m

  • Java中常用的数据库连接池_动力节点Java学院整理

    定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 参考资料 DBCP 下载地址:http://

随机推荐