Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回。类似的,当我们在编写类的方法时,也常常需要对方法入参进行合法性检查,如果入参不符合要求,方法将通过抛出异常的方式拒绝后续处理。举一个例子:有一个根据文件名获取输入流的方法:InputStream getData(String file),为了使方法能够成功执行,必须保证 file 入参不能为 null 或空白字符,否则根本无须进行后继的处理。这时方法的编写者通常会在方法体的最前面编写一段对入参进行检测的代码,如下所示:
public InputStream getData(String file) {
if (file == null || file.length() == 0|| file.replaceAll("\\s", "").length() == 0) {
throw new IllegalArgumentException("file入参不是有效的文件地址");
}
…
}
类似以上检测方法入参的代码是非常常见,但是在每个方法中都使用手工编写检测逻辑的方式并不是一个好主意。阅读 Spring 源码,您会发现 Spring 采用一个 org.springframework.util.Assert 通用类完成这一任务。
Assert 翻译为中文为“断言”,使用过 JUnit 的读者都熟知这个概念,它断定某一个实际的运行值和预期想一样,否则就抛出异常。Spring 对方法入参的检测借用了这个概念,其提供的 Assert 类拥有众多按规则对方法入参进行断言的方法,可以满足大部分方法入参检测的要求。这些断言方法在入参不满足要求时就会抛出 IllegalArgumentException。下面,我们来认识一下 Assert 类中的常用断言方法:
断言方法 说明
1. notNull(Object object)
当 object 不为 null 时抛出异常,notNull(Object object, String message) 方法允许您通过 message 定制异常信息。和 notNull() 方法断言规则相反的方法是 isNull(Object object)/isNull(Object object, String message),它要求入参一定是 null;
2. isTrue(boolean expression) / isTrue(boolean expression, String message)
当 expression 不为 true 抛出异常;
3. notEmpty(Collection collection) / notEmpty(Collection collection, String message)
当集合未包含元素时抛出异常。
notEmpty(Map map) / notEmpty(Map map, String message) 和 notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message) 分别对 Map 和 Object[] 类型的入参进行判断;
4. hasLength(String text) / hasLength(String text, String message) 当 text 为 null 或长度为 0 时抛出异常;
5. hasText(String text) / hasText(String text, String message) text 不能为 null 且必须至少包含一个非空格的字符,否则抛出异常;
6. isInstanceOf(Class clazz, Object obj) / isInstanceOf(Class type, Object obj, String message) 如果 obj 不能被正确造型为 clazz 指定的类将抛出异常;
7. isAssignable(Class superType, Class subType) / isAssignable(Class superType, Class subType, String message) subType 必须可以按类型匹配于 superType,否则将抛出异常;
使用 Assert 断言类可以简化方法入参检测的代码,如 InputStream getData(String file) 在应用 Assert 断言类后,其代码可以简化为以下的形式:
public InputStream getData(String file){
Assert.hasText(file,"file入参不是有效的文件地址");
① 使用 Spring 断言类进行方法入参检测
…
}
转载自:http://www.ibm.com/developerworks/cn/java/j-lo-spring-utils2/index.html
分享到:
相关推荐
2. **Assert(断言)**:在Java编程中,`assert`关键字用于在测试阶段检查代码假设是否正确,它是进行单元测试和调试的强大工具。在本项目中,通过扩展Spring Boot的断言功能,我们可以创建自定义的断言方法,以适应...
在Spring Boot中,`Assert`工具类提供了一系列静态方法,如`notNull()`、`isNull()`、`isTrue()`等,用于进行数据合法性检查,确保程序运行时不会出现意外情况。例如,`notNull()`方法可以用来检查传入的对象是否为...
4. org.springframework.util.xml.Assert 断言工具类,在我们的参数判断时应该经常使用,常用的方法有 assertNotNull()、assertEquals() 等。 5. org.springframework.util.xml.ClassUtils 用于 Class 的处理工具类...
7. **Spring Framework**: Spring框架中的`BeanUtils` 和 `CollectionsUtils` 提供了对象复制和集合操作的便利,而`Assert` 类则提供了断言功能。 8. **Apache Commons Collections**: 提供了对Java集合框架的扩展...
首先,我们需要确保我们的开发环境中已经安装了TestNG和Spring框架,以及相关的构建工具,例如Maven或Gradle。 1. **集成TestNG和Spring**:在Spring应用中使用TestNG,我们需要在测试配置中声明TestNG测试监听器。...
在Java开发领域,Spring框架无疑是最为广泛使用的轻量级框架之一,而Spring Test则是Spring框架的重要组成部分,它为开发者提供了强大的单元测试和集成测试工具。本文将深入探讨Spring Test的核心概念、功能以及实际...
3. **Spring Test**:使用@RunWith(SpringJUnit4ClassRunner.class)注解标记测试类,表明这是一个Spring测试。通过@ContextConfiguration注解指定上下文配置文件,Spring Test会加载这个配置文件,初始化应用上下文...
同时,Spring4还支持注解驱动的配置,通过`@Configuration`注解标记类为配置类,并使用`@Component`、`@Service`、`@Repository`和`@Controller`等注解进行组件扫描。这种方式可以替代传统的XML配置,使代码更加简洁...
通过 `BoolQueryBuilder` 和 `AggregationBuilders` 等工具类,可以构建出丰富的查询和聚合表达式。 ### 8. 分页与排序 在 Repository 方法中,可以使用 `Pageable` 参数来实现分页,使用 `Sort` 来指定排序规则。...
Spring框架是Java应用程序开发中的一个核心工具,它提供了一个全面的编程和配置模型,促进了松散耦合、可测试和模块化的应用设计。在本压缩包"Spring框架测试.zip"中,包含的是用于进行Spring框架单元测试的重要组件...
- 将`struts.xml`中的Action类设置为Spring配置文件中的Bean ID: ```xml <result name="success">/jsp/loginSuccess.jsp <result name="error">/jsp/loginError.jsp ``` #### 2.2 使用JUnit4.7测试...
Spring作为Java企业级应用开发的主流框架,提供了丰富的功能,包括依赖注入、AOP(面向切面编程)等,而JUnit则是Java语言中最常用的单元测试工具。将两者结合,可以确保我们的Spring应用程序在开发过程中具有高质量...
3. 配置JdbcTemplate或JPA:Spring提供了JdbcTemplate和JPA等工具简化数据库操作。根据你的需求选择合适的方式,并在配置文件中声明相应的bean。 4. 测试连接:编写一个简单的测试类,验证Spring是否能成功连接到...
TestNG和Mockito是两个在单元测试领域常用的工具,它们分别用于测试管理和模拟对象。本篇文章将深入探讨如何在Spring项目中集成TestNG和Mockito进行单元测试。 TestNG是一个强大的测试框架,它扩展了JUnit的功能,...
如果Controller间有共享逻辑,可以考虑提取至公共服务或抽象类。通过解耦和模块化设计,可以避免直接的Controller间调用,提高代码的可测试性和可维护性。 总之,虽然Spring Boot提供了Controller间调用的手段,但...
Spring框架是Java开发中广泛应用的一个开源框架,以其强大的依赖注入(Dependency Injection,...通过学习和实践这个"demo",开发者能够更好地掌握Spring的测试工具和最佳实践,从而在项目中实现更健壮、可靠的软件。
1. **测试类的导入**:通常需要导入JUnit、Spring Test相关的注解和类。 ```java import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.spring...
在Spring中,我们可以使用JUnit和Mockito等工具进行单元测试。针对iBatis的测试,通常会涉及到以下几个步骤: 1. 配置测试环境:创建一个专门为测试用的配置文件,如`test-context.xml`,在这个配置文件中,我们...
具体内容无法直接解析,但通常会包括Spring配置文件、Java源代码、测试类等。 通过以上讲解,我们可以了解到“spring+redis”项目的核心技术和实施流程,这对于理解和实践基于Spring的Redis缓存系统是非常有帮助的...