`
longgangbai
  • 浏览: 7339583 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring中常用方法入参检测工具类

阅读更多

方法入参检测工具类

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 类中的常用断言方法:

断言方法 说明
notNull(Object object) 当 object 不为 null 时抛出异常,notNull(Object object, String message) 方法允许您通过 message 定制异常信息。和 notNull() 方法断言规则相反的方法是 isNull(Object object)/isNull(Object object, String message),它要求入参一定是 null;
isTrue(boolean expression) / isTrue(boolean expression, String message) 当 expression 不为 true 抛出异常;
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[] 类型的入参进行判断;
hasLength(String text) / hasLength(String text, String message) 当 text 为 null 或长度为 0 时抛出异常;
hasText(String text) / hasText(String text, String message) text 不能为 null 且必须至少包含一个非空格的字符,否则抛出异常;
isInstanceOf(Class clazz, Object obj) / isInstanceOf(Class type, Object obj, String message) 如果 obj 不能被正确造型为 clazz 指定的类将抛出异常;
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 断言类进行方法入参检测
…
}

 

可见使用 Spring 的 Assert 替代自编码实现的入参检测逻辑后,方法的简洁性得到了不少的提高。Assert 不依赖于 Spring 容器,您可以大胆地在自己的应用中使用这个工具类。

 

 

小结

本文介绍了一些常用的 Spring 工具类,其中大部分 Spring 工具类不但可以在基于 Spring 的应用中使用,还可以在其它的应用中使用。

对于 Web 应用来说,由于有很多关联的脚本代码,如果这些代码通过拼接字符串的方式动态产生,就需要对动态内容中特殊的字符进行转义处理,否则就有可能产生意想不到的后果。Spring 为此提供了 HtmlUtils 和 JavaScriptUtils 工具类,只要将动态内容在拼接之前使用工具类进行转义处理,就可以避免类似问题的发生了。如果您不介意引入一个第三方类包,那么 jakarta commons lang 通用类包中的 StringEscapeUtils 工具类可能更加适合,因为它提供了更加全面的转义功能。

最后我们还介绍了 Spring 的 Assert 工具类,Assert 工具类是通用性很强的工具类,它使用面向对象的方式解决方法入参检测的问题,您可以在自己的应用中使用 Assert 对方法入参进行检查

分享到:
评论

相关推荐

    spring Security 工具类 spring Security 工具类

    spring Security 工具类 spring Security 工具类spring Security 工具类 spring Security 工具类spring Security 工具类 spring Security 工具类spring Security 工具类 spring Security 工具类spring Security 工具...

    Spring JdbcTemplate 常用方法整理

    本文将深入探讨Spring JdbcTemplate的常用方法,并结合提供的`JsonBean.java`和`JdbcUtils.java`文件,来理解其在实际应用中的使用。 首先,JdbcTemplate的核心功能在于它提供了一系列的方法来执行SQL语句,包括...

    java *spring工具类 方便在非spring管理环境中获取bean

    java *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取...

    Spring boot如何配置请求的入参和出参json数据格式

    在Spring Boot应用中,处理HTTP请求的入参和出参通常是通过模型绑定和自定义转换器来实现的。本文将详细讲解如何配置JSON数据格式,以便于解析和序列化日期等复杂类型的数据。 首先,针对请求入参的JSON数据格式...

    Spring获取ApplicationContext对象工具类的实现方法

    本文将详细介绍Spring中获取ApplicationContext对象的工具类实现方法。 在Spring中,典型的获取ApplicationContext对象的方式是使用ApplicationContext接口的一个实现类,如ClassPathXmlApplicationContext。这是一...

    spring常用jar包

    在Spring中,aspectjweaver.jar通常与AspectJ LTW(Load-Time Weaving)一起使用,实现动态的切面织入,这使得无需重新编译或修改字节码即可添加或更改切面功能。 3. cglib-nodep-2.1_3.jar:CGLIB(Code ...

    SpringBoot之自带工具类常用示例

    本篇将详细介绍Spring Boot中的一些常用工具类及其示例。 1. **`java.time` API** Spring Boot完全支持Java 8的日期时间API,如`LocalDateTime`, `LocalDate`, `LocalTime`等。这些类提供了丰富的功能,如日期时间...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate是Spring框架中用于简化Java数据库访问的工具,它是Spring JDBC模块的核心。这个封装工具类的出现是为了提供一种更简洁、易于使用的接口来执行SQL操作,减轻开发者处理数据库连接、事务管理以及...

    Spring boot工具类静态属性注入及多环境配置详解

    Spring Boot工具类静态属性注入是指使用Spring Boot框架时,如何将配置信息注入到工具类的静态变量中,以便在程序中使用这些配置信息。这种方式可以方便地在不同的环境中切换配置信息,例如在开发环境中使用本地的...

    java spring工具类 方便在非spring管理环境中获取bean

    java spring工具类 方便在非spring管理环境中获取beanjava spring工具类 方便在非spring管理环境中获取beanjava spring工具类 方便在非spring管理环境中获取beanjava spring工具类 方便在非spring管理环境中获取bean...

    SpringData框架中的JPA工具类

    SpringData框架中使用的JPA工具类.模板代码,解决实体管理器工厂的浪费资源和耗时问题.第一次访问getEntityManager方法:经过静态代码块创建一个factory对象,再调用方法创建一个EntityManager对象,第二次方法...

    在spring中获取代理对象代理的目标对象工具类

    `AopTargetUtils`是Spring AOP模块中的一个辅助类,它提供了若干静态方法来帮助开发者获取代理对象的真实目标对象。这个工具类主要服务于以下两种情况: 1. **JDK动态代理**:当我们的代理对象是由Spring的...

    java spring 工具类 java spring 工具类

    java spring 工具类 java spring 工具类java spring 工具类 java spring 工具类java spring 工具类 java spring 工具类java spring 工具类 java spring 工具类java spring 工具类 java spring 工具类

    Spring Utils工具类常用方法实例

    下面我们将介绍Spring Utils工具类中的一些常用方法实例。 判断对象是否为空或空字符串 判断对象对象是否为空或空字符串,可以使用`isEmpty`方法,该方法将判断对象是否为null或者为空字符串。如果对象为空或为空...

    java常用工具类整理

    1. org.springframework.util.StringUtils 工具类用于判断字符串非空,常用的方法有 isEmpty()、hasText() 等。 2. org.springframework.util.CollectionUtils 工具类用于判断 List 和 Map 集合的非空,常用的方法有...

    Spring文件资源操作和Web相关工具类盘点

    以下是一些常用的 Web 工具类: 1. **HttpEntity** 和 **ResponseEntity**: 这两个类用于构建和处理 HTTP 请求和响应。HttpEntity 用于封装请求体,而 ResponseEntity 用于封装响应,它们都包含了 HTTP 头部信息,...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...

    简单了解Spring中常用工具类

    Spring 中常用工具类详解 Spring 框架提供了许多有用的工具类,用于简化应用程序的开发和维护。在这篇文章中,我们将详细介绍 Spring 中常用工具类,包括资源操作、文件操作等。 资源操作 在 Spring 中,资源操作...

Global site tag (gtag.js) - Google Analytics