摘自Hibernate Validator文档:
从上述描述和图示可以看到数据检验伴随整个系统的各个层面,专业的说数据校验属于面向方面的范畴。
请求有五个参数,在做查询的时候通常会做数据校验处理,这里涵盖了数据格式,数据有效性。比如date就要校验数据格式,tt就要校验数据有效性(通常车次类型是固定数目的类型编码,较少改动)。
上面提到做单独的数据校验,这里的数据来自Http Request Parameter,校验则是我们要做的工作。校验有分为编写参数的校验规则和校验逻辑处理。
如何编写校验规则,如何进行校验逻辑处理? 这里引入Java Bean Validation规范,其定义了元数据模型(可以认为是校验规则)和API(校验处理的接口)。Java Bean Validation规范的实现有Hibernate-Validator,Oval等等,可以借助Bean Validation的实现解决方案来做这部分工作。剩下的就是Http Request Parameter到Bean的映射,这里我称该Bean为ParameterBean(参数实体)。
流程说明:首先将请求参数进行包装,包装成参数Bean;然后通过Validation API的实现进行Bean校验得到校验结果;最后更加校验结果来进行下一步具体业务处理。
实际开发中要首先定义好请求参数对应的参数Bean,对该Bean进行校验规则的编写,可以采用XML配置或者Annotation的方式。
具体实现则是熟悉和应用Bean Validation规范以及其对应的实现者,通过自定义扩展更多的校验规则。抽取出业务里关于请求参数的逻辑,交由Bean Validation模块单独处理。
在实际开发中可以更加需要进一步扩展,而正真依赖请求参数校验模块的接口则只有ParameterValidator这个接口,从而分离了请求参数校验,使其独立与业务逻辑。
至此关于“基于Java Bean Validation对Request参数进行校验的设计思路“就告一段落,更多想法有待探索和实践。