jsr 303

Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法。 在这篇文章中,我们将看到如何使用此功能。

设定

首先,我们需要通过创建MethodValidationPostProcessor bean添加对方法参数验证的支持:

 @Configurationpublic class MyConfiguration {@Beanpublic MethodValidationPostProcessor methodValidationPostProcessor() {return new MethodValidationPostProcessor();}}

验证方法参数

注册MethodValidationPostProcessor之后,我们可以通过添加@Validated批注来启用每个bean的方法参数验证。 现在,我们可以将Java Bean验证批注添加到方法参数中以执行验证。

 @Service@Validatedpublic class UserService { public User getUser( @NotBlank String uuid) {...}}

在这里,我们添加了@NotBlank批注,以确保传递的uuid参数不为null或为空字符串。 每当传递无效的uuid时,都会引发ContraintViolationException。

除了简单的参数验证之外,我们还可以验证带有JSR 303注释的对象。

例如:

 public class User { @NotBlankprivate String name; // getter + setter}
 @Service@Validatedpublic class UserService { public void createUser( @Valid User user) {...}}

通过添加@Valid(不是@Validated),我们将用户参数标记为验证。 然后将根据User类中定义的验证约束来验证传递的用户对象。 在此,名称字段不应为null或包含空字符串。

这是如何运作的?

我们注册的MethodValidationPostProcessor bean是一个BeanPostProcessor,它检查每个bean是否被@Validated注释。 如果是这样,它将添加一个AOP拦截器( MethodValidationInterceptor )来拦截方法调用并执行验证。 仅当验证成功时才调用实际的bean方法。

因为此功能依赖于AOP拦截器,所以它仅适用于spring bean。

与往常一样,您可以在GitHub上找到所示示例的源。

翻译自: https://www.javacodegeeks.com/2020/01/method-parameter-validation-with-spring-and-jsr-303.html

jsr 303

jsr 303_使用Spring和JSR 303进行方法参数验证相关推荐

  1. jsr303 spring_使用Spring和JSR 303进行方法参数验证

    jsr303 spring Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 建立 首先,我们需要通过创建MethodVali ...

  2. 使用Spring和JSR 303进行方法参数验证

    Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 设定 首先,我们需要通过创建MethodValidationPostProc ...

  3. Spring Boot如何优雅的校验参数

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「乱敲代码」 做web开发有一点很烦人就 ...

  4. Spring Boot 定义接口的方法是否可以声明为 private?

    我们在 Controller 中定义接口的时候,一般都是像下面这样: @GetMapping("/01") public String hello(Map<String,Ob ...

  5. java mvc 绑定_关于Java:Spring MVC:将请求属性绑定到控制器方法参数

    在Spring MVC中,很容易将请求参数绑定到处理请求的方法参数. 我只是使用@RequestParameter("name"). 但是我可以对request属性做同样的事情吗? ...

  6. Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转)

    Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转) 参考文章: (1)Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转) (2)https://www. ...

  7. Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获

    Spring boot异常统一处理方法:@ControllerAdvice注解的使用.全局异常捕获.自定义异常捕获 参考文章: (1)Spring boot异常统一处理方法:@ControllerAd ...

  8. Spring Validation验证框架参数验证 @Validated 和 @Valid 的区别

    参数验证 @Validated 和 @Valid 的区别 Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR- ...

  9. Spring MVC集成Tiles使用方法

    Spring MVC集成Tiles使用方法 转载于:https://www.cnblogs.com/zhujiabin/p/5012129.html

最新文章

  1. leetcode算法题--扑克牌中的顺子
  2. 关于eclipse的实用技巧
  3. Hive的基本操作-分组和多表连接
  4. mysql sqlite 分页查询_sqlite分页查询
  5. java spring server_java server之spring中的IOC如何用java实现?
  6. SQLserver nText和varchar 不兼容
  7. angular组件图标无法显示的问题
  8. PL/SQL相关的数据字典
  9. 电脑磁盘分区助手:DiskGenius磁盘管理与数据恢复软件
  10. pt-archiver详解
  11. 逻辑斯谛回归logistic regression-最大熵
  12. DuerOS 走进初夏的成都
  13. 【ZOJ2750】Idiomatic Phrases Game(最短路)
  14. 输出字符矩形--实心、空心
  15. 微信小程序多表查询踩坑记录
  16. ASP中Err.number返回的错误代码解释大全
  17. 为什么登出网页浏览器重定向到/login?logout
  18. R语言时间序列分析之ARIMA模型预测
  19. [iPhone-APP]手机归属地查询软件
  20. Hadoop实现数据清洗ETL

热门文章

  1. 程序设计语言常见面试题
  2. Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]
  3. jQuery方法position()与offset()区别
  4. Eclipse小技巧
  5. js提取url参数的几种方法。(搜集)
  6. datanode 不能连接master
  7. python时间差中 seconds 和 total_seconds 区别
  8. linux shell 显示文件最后几行
  9. mysql 时间差函数 timestampdiff datediff 简介
  10. linux shell脚本中调用另一个shell脚本