Spring Boot(15)——自动配置Validation
自动配置Validation
当应用中的Classpath下存在javax.validation的实现时,Spring Boot的org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration将会自动配置用于validate的LocalValidatorFactoryBean,前提是在用户没有自己定义javax.validation.Validator类型的bean的情况下,LocalValidatorFactoryBean也是实现了javax.validation.Validator接口的。此外,在缺少org.springframework.validation.beanvalidation.MethodValidationPostProcessor类型的bean的情况下还会自动配置一个org.springframework.validation.beanvalidation.MethodValidationPostProcessor类型的bean。它允许我们在bean的方法参数或方法上添加JSR303标准的Validation注解,从而在进行bean的方法调用时可以对方法参数或方法的返回值进行有效性验证。需要对bean的方法调用进行有效性校验需要在bean对应的Class上添加org.springframework.validation.annotation.Validated注解。假设应用中拥有如下这样一个bean定义,可以看到notNull方法的参数上添加了@NotNull,即不允许传递的参数为null;notBlank方法的参数上添加了@NotBlank,即不允许传递的参数为null或空字符串;returnPositive方法上添加了@Positive,即返回值只允许返回正数。
@Service
@Validated
public class ValidationTestService {
public void notNull(@NotNull Integer num) {
}
public void notBlank(@NotBlank String str) {
}
@Positive
public int returnPositive(int num) {
return num;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
更多的JSR303注解的应用请参考对应的API文档。
进行单元测试如下,你会发现testNotNull()将失败,而testNotNull2()将成功;testNotBlank()和testNotBlank1()将失败,而testNotBlank2()将成功;testReturnPositive()将成功,而testReturnPositive2()将失败。
@SpringBootTest(classes=Application.class)
@RunWith(SpringRunner.class)
public class ValidationServiceTest {
@Autowired
private ValidationTestService validationTestService;
@Test
public void testNotNull() {
Integer num = null;
this.validationTestService.notNull(num);
}
@Test
public void testNotNull2() {
Integer num = 1;
this.validationTestService.notNull(num);
}
@Test
public void testNotBlank() {
String str = null;
this.validationTestService.notBlank(str);
}
@Test
public void testNotBlank2() {
String str = "";
this.validationTestService.notBlank(str);
}
@Test
public void testNotBlank3() {
String str = "A";
this.validationTestService.notBlank(str);
}
@Test
public void testReturnPositive() {
int num = 1;
this.validationTestService.returnPositive(num);
}
@Test
public void testReturnPositive2() {
int num = -1;
this.validationTestService.returnPositive(num);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(注:本文是基于Spring Boot 2.0.3所写)
---------------------
Spring Boot(15)——自动配置Validation的更多相关文章
- 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
在上篇博客初识Spring Boot框架中我们初步见识了SpringBoot的方便之处,很多小伙伴可能也会好奇这个Spring Boot是怎么实现自动配置的,那么今天我就带小伙伴我们自己来实现一个简单 ...
- Spring boot 的自动配置
Xml 配置文件 日志 Spring Boot对各种日志框架都做了支持,我们可以通过配置来修改默认的日志的配置: #设置日志级别 logging.level.org.springframework=D ...
- spring boot 系列之六:深入理解spring boot的自动配置
我们知道,spring boot自动配置功能可以根据不同情况来决定spring配置应该用哪个,不应该用哪个,举个例子: Spring的JdbcTemplate是不是在Classpath里面?如果是,并 ...
- Spring Boot 排除自动配置的 4 种方法,关键时刻很有用!
Spring Boot 提供的自动配置非常强大,某些情况下,自动配置的功能可能不符合我们的需求,需要我们自定义配置,这个时候就需要排除/禁用 Spring Boot 某些类的自动化配置了. 比如:数据 ...
- 了解Spring Boot的自动配置
摘自:https://www.jianshu.com/p/ddb6e32e3faf Spring Boot的自动配置给开发者带来了很大的便利,当开发人员在pom文件中添加starter依赖后,mave ...
- 自定义spring boot的自动配置
文章目录 添加Maven依赖 创建自定义 Auto-Configuration 添加Class Conditions 添加 bean Conditions Property Conditions Re ...
- Spring Boot的自动配置
Spring Boot的自动配置 --摘自https://www.hollischuang.com/archives/1791 随着Ruby.Groovy等动态语言的流行,相比较之下Java的开发显得 ...
- Spring Boot的自动配置原理及启动流程源码分析
概述 Spring Boot 应用目前应该是 Java 中用得最多的框架了吧.其中 Spring Boot 最具特点之一就是自动配置,基于Spring Boot 的自动配置,我们可以很快集成某个模块, ...
- Spring Boot的自动配置的原理
Spring Boot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入到Spring容器. 1.1.1. ...
- Spring Boot的自动配置,到底是怎么做到?
作者:祖大帅 链接:juejin.im/post/5b679fbc5188251aad213110 来源:掘金 1. Spring Boot.Spring MVC 和 Spring 有什么区别? 分开 ...
随机推荐
- UVA - 1401 Remember the Word(trie+dp)
1.给一个串,在给一个单词集合,求用这个单词集合组成串,共有多少种组法. 例如:串 abcd, 单词集合 a, b, cd, ab 组合方式:2种: a,b,cd ab,cd 2.把单词集合建立字典树 ...
- URAL2104. Game with a Strip(博弈)
There is a strip 1 × n with two sides. Each square of the strip (their total amount is 2n, n squares ...
- SPOJ:Triple Sums(母函数+FFT)
You're given a sequence s of N distinct integers.Consider all the possible sums of three integers fr ...
- 2018.10.20 XMYZ Day1总结
上周的忘写了……题目没有作者…… T1.backpack 期望得分100,实际得分100. 感觉我自己真是不如以前了……以前做这种题都是秒掉的,现在怎么想了10分钟啊…… 因为物品的体积和价值都非常小 ...
- MySQL-业务优化——说的就是变
前言 通过上次发布的业务优化不是一步到位的有不少网友问我许多关于业务优化和Web方面的问题.在这里表示感谢和支持.在期间有些回答不到位的还请谅解,并且个人经验有限. 百牛信息技术bainiu.ltd整 ...
- light oj 1032(数位DP)
求一段区间中,每个十进制数所对应的二进制数中连续的1的个数之和. 设dp[i][0]代表长度为i的二进制数,首位为0,所含有的连续的1的个数之和. dp[i][1]代表长度为i的二进制数,首位为1,所 ...
- 如何替换某文件中的所有的特定字符?---linux sed命令(文本编辑命令) (转载)
转自:http://blog.csdn.net/year_9/article/details/20318407 sed是一个很好的文件处理工具,主要是以行为单位进行处理,可以将数据行进行替换.删除.新 ...
- python 高阶函数三 filter()和sorted()
一.filter()函数 filter()接收一个函数和一个序列.filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素. >>> ...
- P4148 简单题(KDTree)
传送门 KDTree 修改权值当做插入节点,不平衡就暴力重构,询问的时候判断当前节点代表的矩形是否在询问的矩形的,是的话返回答案,相离返回0,否则的话判断当前点是否在矩形内,然后继续递归下去 //mi ...
- 简单的AndroidStudio单元测试工程配置
转载: http://www.jianshu.com/p/03118c11c199