Java工具类——通过配置XML验证Map
背景
在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的。但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种就是通过Map来接收前端过来的所有参数,框架中没有实体类的说法,从接收参数,验证参数到参数至持久层整个过程都是通过Map来传递数据。
而在开发的过程中,减少了实体类的存在,有时是感觉挺方便的,比如:一个系统中有100多个表,这里我们可以减少工作量(虽然对应表的实体可以代码生成),因为我们开发过程中是需要返回多个表关联后的结果的,这里可能我们需要创建DTO,这些步骤确实是挺烦人的。但是,前端过来的参数我们需不需要验证呢?客户的输入不管有意或者是无意,我认为都应该让系统的容错能力更强悍一些。所以,在验证前端过来的参数时,使用了Map就着实让人头痛。每个需要强制验证的参数都需要get,然后判断类型,强制转型,判断参数符不符合期望值边界等。
所以,我就考虑了,实体类可以通过Spring MVC中Hibernate的Validation使用注解的方式进行参数校验,那么,少了实体类,我是不是可以通过配置XML的方式来达到类似有实体类的效果。网上找了类似关键词的工具类,发现没有我所期望的,所以就动手来了一个。
大致的想法
在Web开发时,有许多if-else语句的出现都是在为了验证前端参数合不合法真的是挺无奈的,而且有些代码虽然长起来类似但是呢要去重构成一个公用的方法好像有些困难,时常问自己,要怎么去搞,Java不是JavaScript,语句没那么灵活。
于是想着通过XML配置试试,大致就是通过配置好的XML代替我们的实体类,并且有个入口将XML中的实体映射,并传入待验证的Map,验证之后传出一个数组,如果验证通过数组为空,不通过则是我们XML中配置的对应错误语句。
如何设计XML格式
动手在这之前,需要想好我们大致的XML结构是怎么样的。这里,我的想法是,在我们一般遇到的参数主要就是Integer,String,Double,Date,List了(这里居然没有考虑Boolean,算了,之后再做补充也行)。所以基于以上,设计的结构大致如下:
xmlns="https://www.lger.cn/verify"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-