简介: 希望本文可以帮助到大家,可以用一种优雅方式接入参数校验,保护系统解放自身,从你我做起!
作者 | 中野
来源 | 阿里技术公众号
一 不厌其烦的 if else?
参数校验,为了保护自己的代码,一般都会在开发中假设所有的参数都是不可靠的。针对所有的参数校验场景自己一次进行判断及错误信息的提示。
例如:
if(a.size > 10 && a.size < 100){
Result result = Reuslt.fail("非法参数size , 请检查输入!") ;
return result;
}
if(xxx)
return xxx ;
还有一种case,重一点的业务参数校验,有时候也会被不厌其烦地校验,散落在各个子系统或者系统的各处模块代码中。
例如:
if(!validItem(itemId)){
Result result = Reuslt.fail("不存在的商品id , 请检查输入!") ;
return result;
}
private boolean validItem(itemId){
// RPC getItem
// 是否空判断
return item != null;
}
针对以上的场景,本文探讨一下如何优雅地在业务系统中做参数校验,分享构建通用校验模块的一些实践。
二 业内框架 hibernate validator
1 简介
JSR提供了一套Bean校验规范的API,维护在包javax.validation.constraints下。该规范使用属性或者方法参数或者类上的一套简洁易用的注解来做参数校验。开发者在开发过程中,仅需在需要校验的地方加上形如@NotNull, @NotEmpty , @Email的注解,就可以将参数校验的重任委托给一些第三方校验框架来处理。
引自网络:
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。此实现与 Hibernate ORM 没有任何关系。JSR 303 用于对 Java Bean 中的字段的值进行验证。
Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。
注:可以使用注解的方式进行验证。
接入validation api及hibernate validator后,做普通的参数校验简单到不行: