使用Spring和JSR 303进行方法参数验证
Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法。 在这篇文章中,我们将看到如何使用此功能。
设定
首先,我们需要通过创建MethodValidationPostProcessor bean添加对方法参数验证的支持:
@Configuration public class MyConfiguration { @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor(); } }
验证方法参数
注册MethodValidationPostProcessor之后,我们可以通过添加@Validated批注来启用每个bean的方法参数验证。 现在,我们可以将Java Bean验证批注添加到方法参数中以执行验证。
@Service @Validated public class UserService { public User getUser( @NotBlank String uuid) { ... } }
在这里,我们添加了@NotBlank批注,以确保传递的uuid参数不为null或为空字符串。 每当传递无效的uuid时,都会引发ContraintViolationException。
除了简单的参数验证之外,我们还可以验证带有JSR 303注释的对象。
例如:
public class User { @NotBlank private String name; // getter + setter }
@Service @Validated public 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
使用Spring和JSR 303进行方法参数验证相关推荐
- jsr 303_使用Spring和JSR 303进行方法参数验证
jsr 303 Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 设定 首先,我们需要通过创建MethodValidation ...
- jsr303 spring_使用Spring和JSR 303进行方法参数验证
jsr303 spring Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 建立 首先,我们需要通过创建MethodVali ...
- mybatis是什么_为什么SpringMVC可以正确解析方法参数名称,但MyBatis却不行?
对Java字节码有一定了解的朋友应该知道,Java 在编译的时候,默认不会保留方法参数名,因此我们无法在运行时获取参数名称.但是在使用 SpringMVC 的时候,我发现一个奇怪的现象:当我们需要接收 ...
- 优雅书写Controller(参数验证+统一异常处理)
优雅书写Controller(参数验证+统一异常处理) 文章目录 最近开发了比较多的接口,因为没有可参考的案例,所以一开始一直按照我的理解进行开发.开发多了发现自己每个结果都写了相同的代码:try() ...
- Spring MVC-07循序渐进之验证器 下 (JSR 303验证)
概述 JSR 303 Validator Demo 测试 总结 源码 概述 JSR303"Bean Validation" 和 JSR349 "Bean Validati ...
- JSR 303 - Bean Validation 简介及使用方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.JSR-303简介 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Va ...
- 让Spring 3中jsp的数据对象使用懒加载(FetchType.LAZY)与Controller的JSR 303并存
本文出处:http://blog.csdn.net/chaijunkun/article/details/9083171,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...
- java mvc 绑定_关于Java:Spring MVC:将请求属性绑定到控制器方法参数
在Spring MVC中,很容易将请求参数绑定到处理请求的方法参数. 我只是使用@RequestParameter("name"). 但是我可以对request属性做同样的事情吗? ...
- spring bean依赖_Spring @Configuration并将bean依赖项作为方法参数注入
spring bean依赖 一个春天建议注射豆从Spring的参考指南复制下面的示例中显示之间的相互依存关系的方式在这里 : @Configuration public class AppConfig ...
最新文章
- h5 数字变化_前端/h5 D3.js实现根据数据动态更新图形/类似进度实时变化效果
- mysql 前30秒_mysql – 简单查询需要15-30秒
- http 协议上传文件multipart form-data boundary 说明--转载
- 深度linux 网络配置文件,solver及其配置 - Caffe 深度学习入门教程_Linux教程_Linux公社-Linux系统门户网站...
- 如何使用notepad运行python程序
- Java中GC (Allocation Failure)日志分析实战
- java jnlp 签名_JAVA JNLP组件数字签名制作步骤
- 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题
- htm——position:static、absolute、relative详解
- exception类型 java_程序员小白入门,Java如何选择异常类型?
- 20141214--C#父类,子类
- 炫炫炫的十六进制编辑器
- matlab如何改变数据类型,matlab数据类型转换实用案例
- 简单测试ROS里面C++ 和 python 文件获取参数格式
- java 中关于字节数的总结_javaweb实习报告
- VisualEffectGraph概述
- mybatis报错### The error may involve defaultParameterMap ### The error occurred while setting paramete
- CUDA C++基本写法
- 大厂面试系列(七):数据结构与算法等
- 怎样可以快速高效查询芯片的信息?分享几个查芯片的方法