不加对应的对象只会触发非空校验
加上正确或者错误的对象,都会请求成功,不会触发具体的字段校验规则。
综上所述,在嵌套校验中要成功校验,需要2个注解同时使用,才能保证非空判断和具体的字段校验都成功。
以上就是字段校验结合全局异常捕获的使用。
系列文章目录
文章目录系列文章目录一、@Valid和@Validated的介绍1.引入jar包2. @Valid和@Validated的作用3.@Valid和@Validated的区别4.常用的参数校验注解二、@Valid和@Validated的使用1. 捕获全局异常配置类2.单个接口参数校验3.接口类参数校验提示4.嵌套类注解提示4.1. 实体类数据4.2.接口校验4.3. 接口调用5. 分组校验5.1 校验的实体类数据5.2 接口校验5.3 接口调用1.提交学习刷题试卷接口演示2.提交文档学习接口演示6
@Valid 是JSR303 指定的标准 ,hibernate 对其做了实现。登录后复制 <dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-vali...
SpringBoot全局异常捕获处理及参数校验
为什么要用全局异常处理?
在日常开发中,为了不抛出异常堆栈信息给前端页面,每次编写Controller层代码都要尽可能的catch住所有service层、dao层等异常,代码耦合性较高,参数校验逻辑业务逻辑还长,不利于后期维护。
为解决该问题,可以将Controller层异常信息统一封装处理,且能区分对待Controller层方法返回给前端。
如何进行全局异常捕获和处理?
一共有两种方法:
Spring的AOP
@ControllerAdvice结合@Exc
网上看了很多资料但是都没有解决我的问题,最后通过查看异常信息解决问题,这里做相关记录以备后用,怕忘了!也给需要的同志们参考。
首先我们校验如果错误会抛出ConstraintViolationException异常,但是在全局异常处理中如下编写无法捕获:
@ResponseBody
@ExceptionHandler(ConstraintViolationException.class)
public Map<String,Object> handleCve(ConstraintViolat
本文带你了解如何正确地使用@NotEmpty、@NotBlank等注解、@Validated和@Valid的区别、解决@NotBlank等注解不生效的问题、使用BindingResult进行(controller)接口请求参数的统一校验。
为什么使用注解呢?因为服务端通常将`controller层`作为调用的第一层,因而参数校验常常在这里完成。假如在controller层的某个方法中,有很多个需要校验的请求参数,这样写无疑会有多条if判断语句,因而,我们需要使用优雅的方式处理接口请求参数。......
目的是优雅的实现参数校验,避免使用if-else。
@Valid是javax提供的,可以用在方法、构造函数、方法参数和成员属性(字段)上。可实现嵌套验证。
@Validates是spring框架validation类提供的,可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上。可实现分组验证。
常用校验
实体中参数需要参数校验注解,比如@NotNull等,在文章最后会做一个总结。
@Data
@TableName("tb_brand")
public class BrandEntity imple
`@Validated` 统一参数检验
javax.validation.ConstraintViolationException
org.springframework.validation.BindException
org.springframework.web.bind.MethodArgumentNotValidException
参数检验异常分析
`@Validated` 和 `@Valid` 都是用于校验数据的注解,但是它们的使用场景和校验规则略有不同。
`@Validated` 是 Spring 提供的校验注解,它可以用于方法、构造函数、类以及接口上。它的作用是告诉 Spring 在执行方法或构造函数时需要进行数据校验,校验规则是通过在方法参数上添加校验注解来实现的。`@Validated` 支持分组校验和级联校验。
`@Valid` 则是 Java 标准库中的校验注解,它只能用于方法参数、字段、方法返回值等元素上。它的作用是告诉 Java 校验框架对该元素进行数据校验,校验规则是通过在该元素上添加校验注解来实现的。`@Valid` 没有分组校验和级联校验的功能。
`@Validated` 支持的校验注解有:
- `@NotNull`:验证对象不为 null,无法查检长度为 0 的字符串
- `@NotEmpty`:验证对象不为 null,长度不为 0
- `@NotBlank`:验证对象不为 null,去除首位空格后,长度不为 0
而 `@Valid` 支持的校验注解有:
- `@NotNull`:验证对象不为 null,无法查检长度为 0 的字符串
- `@AssertTrue`:验证 Boolean 对象是否为 true
- `@Size`:验证对象(Array, Collection, Map, String)长度是否在指定范围内
- `@Min`:验证 Number 和 String 对象是否大等于指定的值
- `@Max`:验证 Number 和 String 对象是否小等于指定的值