一.前言

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

二.Java Validation组件

JSR

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

Hibernate Validation

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

三.用法

引入依赖:

javax.validation

validation-api

org.hibernate

hibernate-validator

手动添加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,调用方法时自动拦截。

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

java 入参校验_Java Validation方法入参校验实现过程解析相关推荐

  1. aspect 方法入参 获取_谈谈Spring AOP中@Aspect的高级用法示例

    前言 本文主要跟大家分享介绍了关于Spring AOP中@Aspect的高级用法,下面话不多说了,来随着小编一起看看详细的介绍吧. 1 切点复合运算 支持在切点定义中加入以下运算符进行复合运算: 运算 ...

  2. aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...

    作者:小傅哥 博客:bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获! ❞ 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了 ...

  3. 方法入参很复杂,每次调用都要构造BO入参?一招教你自动构造入参

    场景 同在互联网打工的小伙伴们肯定都面临这样一种场景: 通用逻辑(被多处调用)我们通常会封装成一个方法,那这个方法入参正常来说都不会少,(在开发规范中,经常会看到一条"方法入参正常不超过3个 ...

  4. Spring-AOP @AspectJ进阶之绑定连接点方法入参

    文章目录 概述 实例 概述 我们前面的博文在讲解切点函数时说过args().this().target().@args().@within().@target()和@annotation()这7个函数 ...

  5. aspectj 获取方法入参_深入探索编译插桩技术(二、AspectJ)

    本文来自jsonchao的投稿,个人微信:bcce5360 现如今,编译插桩技术已经深入 Android 开发中的各个领域,而 AOP 技术正是一种高效实现插桩的模式,它的出现正好给处于黑暗中的我们带 ...

  6. Mybatis方法入参处理

    1,在单个入参的情况下,mybatis不做任何处理,#{参数名} 即可,甚至连参数名都可以不需要,因为只有一个参数,或者使用 Mybatis的内置参数 _parameter. 2,多个入参: 接口方法 ...

  7. spring特殊字符转义和方法入参检测工具类

    由于 Web 应用程序需要联合使用到多种语言,每种语言都包含一些特殊的字符,对于动态语言或标签式的语言而言,如果需要动态构造语言的内容时,一个我们经常会碰到的问题就是特殊字符转义的问题.下面是 Web ...

  8. 新版SpringCloudGateway网关 切面修改方法入参

    通过注解修改方法入参值,一般都是采用实现 org.springframework.web.method.support.HandlerMethodArgumentResolver 接口的 resolv ...

  9. java操作es聚合操作并显示其他字段_java使用elasticsearch分组进行聚合查询过程解析...

    这篇文章主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java连接elas ...

最新文章

  1. 脂肪肝,应该拿你怎么办
  2. 成都有哪些牛逼的互联网公司?
  3. 304 Not Modified
  4. HikariCP--一款高性能的 JDBC 连接池
  5. 红米pro android 7,消费降级?红米Redmi Note 7Pro开箱以及简评
  6. 一个简单的epoll测试例子
  7. navicat使用触发器
  8. Android strings.xml中定义字符串显示空格
  9. ora-01189故障解决办法
  10. 机电大作业(第一阶段)
  11. Raspberry 4B
  12. clip_gradient_norms()
  13. Cesium.js解析第一篇 Cartesian3
  14. grub error: unknown filesystem的解决办法
  15. python大赛对名_用100行Python爬虫代码抓取公开的足球数据玩(一)
  16. make: 放弃循环依赖 问题解决(3d 重建)
  17. redhat linux 安装 gcc编译器
  18. cisco配置三台静态路由
  19. 关于磁盘阵列和LVM
  20. 文件后缀名大全及其说明表

热门文章

  1. 英语语法长难句——定语和定语从句
  2. 舒亦梵:4.24非农周即将来临,作为投资者的你做好准备了吗
  3. Remix使用教程,新版 remix 使用教程
  4. 数据标注去哪接任务订单?靠谱的数据标注平台有哪些?
  5. Caj文件怎么转换成pdf?Caj转pdf在线转换器推荐
  6. Telegram 搜索机器人BOT
  7. Android Framework 包管理子系统(03)应用安装
  8. 详细的买卖天猫店铺网店转让步骤
  9. 问卷星刷问卷python_Python+Selenium自动刷问卷星问卷
  10. Android性能调优实例