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 断言类的方法来检测参议院



}

版权声明:本文博主原创文章。博客,未经同意不得转载。

Spring Assert主张 (参议院检测工具的方法-主张)的更多相关文章

  1. Windows系统中内存泄露与检测工具及方法

    1.检测需要使用的工具:windbg工具.检测前,需要先安装windbg工具.安装了该工具后,会在安装目录下有一个umdh工具.假设windbg安装在以下目录下:D:\Program Files\De ...

  2. 关于spring中Assert的应用(方法入参检测工具类)

    关于spring中Assert的应用(方法入参检测工具类) Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方 ...

  3. Spring Assert(方法入参检测工具类-断言)

    Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查,如果入参不符合要求,方法将通过抛出异 ...

  4. Linux后门入侵检测工具,附bash漏洞解决方法[转载]

    转自:http://blog.jobbole.com/77663/ 官网 ClamAV杀毒软件介绍 ClamAV是一个在命令行下查毒软件,因为它不将杀毒作为主要功能,默认只能查出您计算机内的病毒,但是 ...

  5. Linux后门入侵检测工具,附bash漏洞解决方法

    一.rootkit简介 rootkit是Linux平台下最常见的一种木马后门工具,它主要通过替换系统文件来达到入侵和和隐蔽的目的,这种木马比普通木马后门更加危险和隐蔽,普通的检测工具和检查手段很难发现 ...

  6. Spring MVC模式下,获取WebApplicationContext的工具类 方法

    在已有的注解类型下,获取WebApplicationContext的工具类 通过  WebApplicationContextUtils.getRequiredWebApplicationContex ...

  7. Spring Assert 断言

    Assert(断言)的初步理解构思 Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查, ...

  8. C/C++的内存泄漏检测工具Valgrind memcheck的使用经历

    Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Lin ...

  9. LeakCanary内存泄漏检测工具使用步骤

    LeakCanary内存检测工具使用步骤: 第一步,进入app目录下的build.gradle,在最下面找到dependencies{},里面添加如下三行语句: debugCompile 'com.s ...

随机推荐

  1. QML性能

    1) Limit JavaScript a) inline JavaScript:  内联的JavaScript方法;   1. 将js方法放置在Element内部;  2. 尝试将语句写在一行内; ...

  2. KFC - About KFC - Quality Assurance

    KFC - About KFC - Quality Assurance Restaurant Quality The main attributes for KFC restaurant excell ...

  3. Flexigrid的使用(整合Struts2)

    Flexigrid是一个jQuery表格插件 下载地址:http://download.csdn.net/detail/itmyhome/7613879 用法: 一.相关资源文件的引入 <lin ...

  4. hdu1069(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 分析: 每种石头有六种方法,那么等效为:有6*n种石头. 根据x和y排序(要保证相应的x.y总有 ...

  5. Devstack: A copy of worked local.conf I&#39;m sharing with you.

    service_plugins = neutron.services.firewall.fwaas_plugin.FirewallPlugin [service_providers] service_ ...

  6. SE 2014年4月16日

    一. 描述BGP路由协议中  BGP路由携带 AS-PATH/ next-hop  / ORIGIN /  local-preference 属性的特点! BGP协议中的AS-PATH是AS列表,用来 ...

  7. Python数据结构-序列

    shopList=['apple','orange','pen'] print(shopList) print(]) print(]) print(:])) print(])) 运行结果: ['app ...

  8. Codefirst

    新建控控制台程序 nuget  输入Install-Package EntityFramework  回车: Program.cs只 添加 using ConsoleApplication18.Mig ...

  9. android如何使用自己定义JNI接口,以及NDK环境建设和使用的工具。

    一.建筑环境: 1.需要的工具: A.cygwin    (在windows下使用LINUX系统)                                                   ...

  10. The example program of C on point

    计划一: #include<stdio.h> #define N_VALUES 5 int main( void ) { float values[N_VALUES]; float *vp ...