0%

进行参数校验的位置

有参数的地方就要有校验,本文就介绍下我理解的web项目参数校验,对于其他种类的项目,也可以参考。

首先来说,参数校验可以分为两种:一种是参数的格式校验,比如说字段不能为空,字符串长度不能超过10,数值不能小于20等;还有一种是参数业务校验,比如用户名是否已存在,订单号对应的订单是否可支付等。

对于参数格式校验可以在三个地方进行校验。可以在前端页面上,也可以在应用层中的controller或是action中,也可以在服务层的service中进行。一般来说前端页面上要有,不光能减少与服务器的通信,还能提升用户体验。至于在应用层进行校验还是服务层校验就需要看项目情况了。如果说应用层和服务层的一个功能,完全由一个人来完成,而且约定好,所有参数格式必需校验通过之后才能传入到服务层,这种情况可以只在应用层进行校验。如果说服务层的开发人员,不确定参数是否会经过校验就传入进来,那么就在方法中首先进行下参数格式校验。

无论是在页面,应用层还是服务层进行参数格式校验时,校验的规则一定要一样。既然规则一样,就是会有重复的地方。对于应用层和服务层,可以共用同一套逻辑。可以用这样一种方式实现共用,使用Hibernate Validator对参数对象按要求进行注解,进入方法之后,首先使用Hibernate Validator进行校验,然后再调用其他代码。前端页面就需要独立写校验代码了。如果说能把后台的校验规则,自动的转换成前端使用的代码,那就再好不过了。这样就可以做到校验规则写一次,哪都可以用了。

参数业务校验建议是只在服务层做就可以了。

我建议是在服务层进行所有的校验,因为服务层是真正知道参数应该是什么样子的,需要符合什么样的业务逻辑。

总的来说,就是第一个方法在调用第二个方法时,在调用前进行参数校验还是在第二个方法中进行校验。本着输入是恶魔的理念,建议是在真正使用参数的地方进行校验。