自动配置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;
}
}
更多的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);
}
}
(注:本文是基于Spring Boot 2.0.3所写)
相关推荐
SpringBoot 提倡“约定优于配置”的原则,通过自动配置和一系列预先打包的 Starter POMs(启动器),使得开发者能够更快速地构建稳定且独立运行的 Spring 应用程序。 SpringBoot 的优点主要包括: 1. 快速构建:它...
《Spring框架4.2详解——基于Java开发者的实用指南》 Spring框架是Java开发者不可或缺的工具,它以其灵活、高效和模块化的特性深受广大程序员喜爱。本文将详细探讨Spring框架4.2版本的核心特性和使用方法,帮助使用...
Spring 框架是 Java 开发领域中一个极为重要的开源...随着版本的迭代,Spring不断演进,引入了更多现代的特性,如Spring Boot、Spring Cloud等,但其核心理念——简化开发、提高可测试性和模块化设计——始终贯穿其中。
在IT行业中,Spring、Struts2和Hibernate是Java Web开发中的三大...随着技术的不断迭代,现在的趋势是转向Spring Boot和Spring MVC,它们集成了许多功能,简化了配置,但S2SH整合仍然是理解Web开发框架协同工作的基础。
如果项目使用了Spring Boot,那么Spring MVC的配置将更简洁,因为Spring Boot自动配置了许多默认设置。 实践项目"Spring-MVC-Practice"将涵盖以上知识点,并通过实际编码加深理解。从项目文件名称列表"Spring-MVC-...
Spring Boot是Java开发中的主流框架,它简化了Spring应用的初始搭建以及配置过程。VueBlog项目使用Spring Boot作为基础架构,提供了快速开发服务的能力。Spring Boot内嵌Tomcat服务器,使得我们可以无需额外配置...
8. **测试**:为了保证软件质量,李亮可能使用JUnit和Mockito进行单元测试,而集成测试则可能使用Spring Boot的Test Slice或Selenium等工具。 9. **部署与运维**:项目可能部署在Tomcat或Jetty等应用服务器上,并...
不过,随着Spring Boot和Spring MVC的普及,现在越来越多的项目倾向于使用它们,因为它们提供了更简洁的配置和更现代的开发体验。但Struts2作为经典的Java Web框架,其设计理念和实践仍然值得学习和借鉴。
- **Spring Boot**:简化了Spring应用的初始搭建及配置过程,自动配置了许多常见组件。 - **Spring Data JPA**:简化了数据访问层的开发,支持JPA规范,可以直接使用Repository接口操作数据库。 - **Hibernate**...
5. **项目构建与技术选型**:使用Spring Boot 2和Spring Web MVC可以快速搭建一个Java应用,集成MyBatis和HikariCP作为数据访问和连接池管理组件。同时,创建阿里云RDS MySQL实例可以提供稳定可靠的数据库服务。 6....
开发中通常会采用Spring Boot框架,它简化了配置过程,提供了快速构建微服务的能力,并且拥有丰富的生态库支持。结合Thymeleaf或Vue.js作为前端框架,可以构建出交互性强、用户体验良好的用户界面。 二、数据库设计...
1. **Spring Boot框架**:Spring Boot简化了Spring的应用开发,提供了快速构建独立应用程序的方式。我们可以通过其内置的Tomcat服务器,轻松实现服务的启动和部署。 2. **RESTful API设计**:为了方便前端和其他...