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 类中的常用断言方法:
Spring 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 断言类进行方法入参检测
…
}
- 大小: 67.7 KB
分享到:
相关推荐
Spring Boot中的Assert类就提供了这样的功能,通过notNull()、isNull()、isTrue()等方法,开发者可以为方法的参数设定断言条件,确保程序在接收到不合法的输入时能够快速给出反馈,确保程序的健壮性。 接下来,让...
- `Collections`是工具类,提供了对集合的各种操作的静态方法,如排序、查找、转换等。 7. `assert`关键字的使用: - 断言用于调试,它假设给定的条件始终为真。如果条件为假,将抛出`AssertionError`。 - 在...
`assert` 语句用于断言某个条件为真,主要用于调试阶段检测错误。如果表达式为 false,则会抛出 AssertionError 异常。 ### 16. Garbage Collection (GC) - **概念**:自动内存管理机制,自动回收不再使用的对象所...
在JavaScript开发中,单元测试是验证单个函数、方法或类行为是否符合预期的一种方法。通过编写针对这些代码单元的测试用例,开发者可以检测到潜在的错误和缺陷,防止它们在生产环境中出现。这有助于提高软件的稳定性...
JUnit提供了assert系列方法,如assertEquals、assertTrue等,用于验证实际结果是否与期望相符。 9. 回归测试:每当代码发生变化时,都需要运行回归测试以确保修改没有引入新的错误。这可以通过重新运行整个测试套件...
断言,用于在开发阶段检测假设条件是否为真,帮助调试和验证代码逻辑。 ### associate 关联,指两个或多个对象之间的关系,如一对多、多对多等关联关系。 ### attribute 属性,表示对象的特征或状态,是类的成员...
Java标准库中的Assert类,以及第三方库如Hamcrest和AssertJ提供了丰富的断言方法。 4. **集成测试**:如果"javamyapp"包含集成测试,那么可能会涉及到Spring Boot的测试支持,包括@SpringBootTest注解,以及如何...
8. **异常处理和断言**: 在Java测试中,断言(如Assert类)用于验证预期结果,而异常处理则确保程序在错误情况下能优雅地失败。 9. **质量保证工具**: SonarQube可以用来进行代码质量分析,检测潜在的bug、代码异味...
Spring Boot框架提供了Spring Boot Test支持,可以方便地进行集成测试,确保各个组件协同工作的正确性。 3. 性能测试(Performance Testing): 对于Java应用,性能测试旨在评估系统在高负载或大数据量情况下的...