Java中如何实现Validation方法参数校验步骤详解?

2026-04-30 06:062阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计608个文字,预计阅读时间需要3分钟。

Java中如何实现Validation方法参数校验步骤详解?

一.前言在日常的开发中,经常需要对方法参数进行校验(非空、长度等)。如果采用硬编码的方式(if..else..)进行校验,会导致代码冗余、可复用性低,维护成本高。借助Validation组件,可以简化校验过程,提高代码质量和可维护性。

一.前言

在日常的开发中,经常需要对方法参数进行校验(非空、长度等)。如果采用hardcode去校验(if..else..),会造成代码冗余,复用性低,导致维护成本比较高。借助Validation组件,可以很方便地通过注解来校验参数。

二.Java Validation组件

JSR

JSR 是一种规范标准,规定了一些校验规范的注解,位于javax.validation.constraints包下,只提供规范不提供实现,如@NotNull,@Size 等

Hibernate Validation

hibernate Validation 与 hibernate ORM框架没有半毛钱关系,它提供了JSR的实现,位于org.hibernate.validator.constraints包下。

三.用法

Java中如何实现Validation方法参数校验步骤详解?

引入依赖:

<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency>

手动添加bean :

对实体类添加注解:

@Data publicclassPeople { @NotNull(message = "姓名不能为空") privateStringname; @Min(value = 1, message = "年龄不能小于1岁") privateInteger size; }

Controller层上用法:

如果在Spring的Controller层引用以上Java Bean对象,则需要加上@Valid注解,用法如下:

@RestController @RequestMapping("/api") publicclassPeopleController { @Autowired privatePeopleService peopleService; @RequestMapping("/addPeople") publicStringaddPeople(@Valid@RequestBodyPeople people) { peopleService.addPeople(people); return"ok"; } }

Service层上用法:

@Valid注解,当我们用Service接口层的时候,会发现参数校验逻辑是不生效的。要向让@Valid注解在controller层以外的地方生效,必须配合@Validated来使用。这是因为Spring给我们创建了一个用于参数校验的AOP切面逻辑,过滤方式就是class被@Validated修饰的bean对象。所以我们可以使用@Validated来修饰我们的service层实现类:

@Validated public interface PeopleService { voidaddPeople(@ValidPeople people); }


Controller层不需要@Validated注解是因为在Spring的controller层有数据绑定和校验的过程,默认就会对@Valid修饰的方法参数使用Validator来做校验逻辑。

四.原理

1.利用Spring ioc,注入MethodValidationPostProcessor和LocalValidatorFactoryBean。

2.利用Spring ioc提供的扩展点(BeanPostProcessor, InitializingBean),初始化拦截器MethodValidationInterceptor

3.MethodValidationPostProcessor用来生成和植入拦截器MethodValidationInterceptor,调用方法时自动拦截。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

本文共计608个文字,预计阅读时间需要3分钟。

Java中如何实现Validation方法参数校验步骤详解?

一.前言在日常的开发中,经常需要对方法参数进行校验(非空、长度等)。如果采用硬编码的方式(if..else..)进行校验,会导致代码冗余、可复用性低,维护成本高。借助Validation组件,可以简化校验过程,提高代码质量和可维护性。

一.前言

在日常的开发中,经常需要对方法参数进行校验(非空、长度等)。如果采用hardcode去校验(if..else..),会造成代码冗余,复用性低,导致维护成本比较高。借助Validation组件,可以很方便地通过注解来校验参数。

二.Java Validation组件

JSR

JSR 是一种规范标准,规定了一些校验规范的注解,位于javax.validation.constraints包下,只提供规范不提供实现,如@NotNull,@Size 等

Hibernate Validation

hibernate Validation 与 hibernate ORM框架没有半毛钱关系,它提供了JSR的实现,位于org.hibernate.validator.constraints包下。

三.用法

Java中如何实现Validation方法参数校验步骤详解?

引入依赖:

<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency>

手动添加bean :

对实体类添加注解:

@Data publicclassPeople { @NotNull(message = "姓名不能为空") privateStringname; @Min(value = 1, message = "年龄不能小于1岁") privateInteger size; }

Controller层上用法:

如果在Spring的Controller层引用以上Java Bean对象,则需要加上@Valid注解,用法如下:

@RestController @RequestMapping("/api") publicclassPeopleController { @Autowired privatePeopleService peopleService; @RequestMapping("/addPeople") publicStringaddPeople(@Valid@RequestBodyPeople people) { peopleService.addPeople(people); return"ok"; } }

Service层上用法:

@Valid注解,当我们用Service接口层的时候,会发现参数校验逻辑是不生效的。要向让@Valid注解在controller层以外的地方生效,必须配合@Validated来使用。这是因为Spring给我们创建了一个用于参数校验的AOP切面逻辑,过滤方式就是class被@Validated修饰的bean对象。所以我们可以使用@Validated来修饰我们的service层实现类:

@Validated public interface PeopleService { voidaddPeople(@ValidPeople people); }


Controller层不需要@Validated注解是因为在Spring的controller层有数据绑定和校验的过程,默认就会对@Valid修饰的方法参数使用Validator来做校验逻辑。

四.原理

1.利用Spring ioc,注入MethodValidationPostProcessor和LocalValidatorFactoryBean。

2.利用Spring ioc提供的扩展点(BeanPostProcessor, InitializingBean),初始化拦截器MethodValidationInterceptor

3.MethodValidationPostProcessor用来生成和植入拦截器MethodValidationInterceptor,调用方法时自动拦截。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。