Spring方法级别的验证
设置验证点及验证方式
(1)Spring方法级别的验证有多种验证方式,比较常用的有
@NotBlank:主要是对字符串的验证,不为null且去除空白符之后长度大于0
@NotNull:主要是对对象的验证,不为null,此处特别注意,当对int等类型进行验证时,需要使用这种方式,但是要使用int的封装类型Integer
@NotEmpty:主要是对集合类对象的验证,集合中元素的个数大于0
(2)Spring方法级别的验证可以验证的点示范用例如下(忽略import)
@Validated
public class Test() {
@NotBlank(message = "用户名不能为空")
private String usr; private int age; public void grow(
@NotNull(message = "增长的年龄不能为空") Integer ageAdd) {
age += ageAdd;
} public @NotNull Integer howOld() {
return age;
}
}
可以对属性、方法入参和返回值等进行验证。
开启验证处理
当对验证点进行验证之后,为了得到验证的结果,需要开启对验证结果的处理。在Spring3.1之后,只需要引入一个Bean即可,MethodValidationPostProcessor。根据spring的依赖注入方
式,可以采用xml配置,java配置的方式在spring自动注入时将MethodValidationPostProcessor注入到spring容器中,例如如下的java配置(忽略import):
@Configuration
public class beanConfig() { @Bean
public MethodValidationPostProcessor getBean() {
return new MethodValidationPostProcessor();
}
}
关于MethodValidationPostProcessor类的描述可自行阅读源码,在阅读源码时,我们可以看到MethodValidationPostProcessor类实现了InitializingBean接口,实现了InitializingBean
的afterPropertiesSet()方法,这是spring用于初始化的一个方法,在initial-method方法之前调用,值得深入研究。
回到开启验证处理,不仅需要引入MethodvalidationPostProcessor这个类,还需要在适当的地方添加@Validated注解,告诉MethodValidationPostProcessor这个类,此处需要验证结果处理。
@RequestParam与验证注解
在controller中可能会同时出现@RequestParam和验证的注解(@NotBlank、@NotNull等),如下例:
@RequestMapping("/index")
public String list(
@RequestParam(required = false, defaultValue = "") @NotBlank(message = "用户名不能为空") String usr)
/*
code
*/
}
解析:(1)如果url请求中有传参数,只需要验证@NotBlank;
(2)如果url请求中没有传参数,@RequestParam中只要有defaultValue,不管required是true还是false,参数的值都赋为defaultValue的值,再验证@NotBlank;
例:@ReuqstParam(required=true, defaulfValue"10011") @NotBlank(message="用户名不能为空") String usr
此时没有传参,usr为10011,虽然required值为true,但是不会报错。
(3)如果@RequestParam中required属性为true,没有defaultValue且url请求中没有传参,那么会返回@RequestParam的错误信息,不会返回@NotBlank的错误信息。
例:@RequestParam(required=true) @NotBlank(message = "用户名不能为空") String usr
此时没有传参,只会返回没有参数的错误。
注意:没有传参与没有参数值是有区别的,required限制的是url中有这个参数,参数的值是多少并不关心,如果没有值,会被赋值为null;@NotBlank限制的是参数的值不能为空(null或去除空白符长度为0)。没有传参,required=true时会报错,没有参数值,@NotBlank会报错。
Spring方法级别的验证的更多相关文章
- Spring方法级别数据校验:@Validated + MethodValidationPostProcessor
每篇一句 在<深度工作>中作者提出这么一个公式:高质量产出=时间*专注度.所以高质量的产出不是靠时间熬出来的,而是效率为王 相关阅读 [小家Java]深入了解数据校验:Java Bean ...
- Spring3.1 对Bean Validation规范的新支持(方法级别验证)
上接Spring提供的BeanPostProcessor的扩展点-1继续学习. 一.Bean Validation框架简介 写道Bean Validation standardizes constra ...
- Spring MVC 使用介绍(十五)数据验证 (二)依赖注入与方法级别验证
一.概述 JSR-349 (Bean Validation 1.1)对数据验证进一步进行的规范,主要内容如下: 1.依赖注入验证 2.方法级别验证 二.依赖注入验证 spring提供BeanValid ...
- Spring Security方法级别授权使用介绍
1.简介 简而言之,Spring Security支持方法级别的授权语义. 通常,我们可以通过限制哪些角色能够执行特定方法来保护我们的服务层 - 并使用专用的方法级安全测试支持对其进行测试. 在本文中 ...
- spring security 在controller层 方法级别使用注解 @PreAuthorize("hasRole('ROLE_xxx')")设置权限拦截 ,无权限则返回403
1.前言 以前学习的时候使用权限的拦截,一般都是对路径进行拦截 ,要么用拦截器设置拦截信息,要么是在配置文件内设置拦截信息, spring security 支持使用注解的形式 ,写在方法和接口上拦截 ...
- Spring中的@Transactional 放在 类级别 和 方法级别 上有什么不同?
Spring中的@Transactional 放在类级别 和 方法级别 上有什么不同? @Transactional放在类级别上是否等同于该类的每个方法都放上了@Transactional? 是的一般 ...
- Spring,AOP实现功能级别权限验证
1. 首先是问题出现的原因 对于一个我的一个个人博客网站,我希望游客可以浏览我的博客,但是评论功能是需要登录才能使用 这就需要对某个功能进行权限验证 对于过滤器,拦截器,AOP的区别日后再讨论,现在是 ...
- SpringBootSecurity学习(06)网页版登录方法级别的权限
用户授权 前面讨论过,Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.前面介绍了登录,下面简单 ...
- Spring Security 概念基础 验证流程
Spring Security 概念基础 验证流程 认证&授权 认证:确定是否为合法用户 授权:分配角色权限(分配角色,分配资源) 认证管理器(Authentication Manager) ...
随机推荐
- Azkaban-2.5.0-部署与常见案例
该文章是基于 Hadoop2.7.6_01_部署 . Hive-1.2.1_01_安装部署 进行的 1. 前言 在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核 ...
- Mac快速上手指南
上周刚入手了2017版MacBookPro,预装macOS High Sierra.第一次接触Mac系统,经过一周的使用,简单总结下与Windows相比最常用的功能,快速上手. 1.Mac键盘实现Ho ...
- Java读取properties文件工具类并解决控制台中文乱码
1.建立properts文件(error.message.properties) HTTP201= 请求成功并且服务器创建了新的资源 2.在spring-mvc.xml文件(applicationCo ...
- React框架简介
React的基本认识 Facebook开源的一个js库,一个用来动态构建用户界面的js库 英文官网,中文官网 React的特点 Declarative(声明式编码),Component-Based(组 ...
- Java中的HashMap源码记录以及并发环境的几个问题
HashMap源码简单分析: 1 一切需要从HashMap属性字段说起: /** The default initial capacity - MUST be a power of two. 初始容量 ...
- (一) 天猫精灵接入Home Assistant- hass对接天猫精灵
1如何利用论坛的认证服务器对接天猫精灵 说起天猫精灵的接入,最早是由c1pher(25989406)大神通过开发自定义技能接入,后面qebabe大神进行了改进,可以直接通过HASS API读取hass ...
- mybatis collection使用注意
背景 今天我在使用collection时候,出现数据库有两条数据,但是却返回一条,在复制这条数据到四条后,依然返回一条 分析 这四条数据,数据库的每个字段值完全相同,所以估计是当成一条处理了 如果随便 ...
- (转)yum提示Another app is currently holding the yum lock; waiting for it to exit...
文章转自 yum 下载东西突然卡主了,我直接ctrl+c退出,然后再次下载时候出现 Another app is currently holding the yum lock; waiting for ...
- Cesium学习1:如何在本机的Apache tomcat9.0.8服务器中打开cesium的index.html页面
Cesium的官方网站:https://cesiumjs.org/ 点击这个按钮来获取最新的Cesium:下载Cesium. 下载完成之后将zip文件解压到你选择的新目录,解压之后文件目录类似于下图. ...
- java 文件字节和字符流 缓冲流
流的原理 1) 在 Java 程序中,对于数据的输入/输出操作以“流”(stream) 方式进行:2) J2SDK 提供了各种各样的“流”类,用以获取不同种类的数据:程序中通过标准的方法输入或输出数据 ...