如图所示代码,在何时需要判断变量是否为空的疑问
来源:6-3 登出,注册,校验功能开发
慕慕7598572
2018-04-23
另外,对于传递进来的user对象,不需要校验它的另外一些成员变量是否为空吗?例如这几个成员变量:password,email,phone,question,answer,是否也是需要校验是否为空的呢?
2回答
-
校验分前台和后台两种校验
前台校验的目的主要是给普通用户用的,比如注册页面,在注册的时候前台校验用户是否输入了用户名,密码等必填字段,如果没有填,那么就不会将注册的请求发送给后台(一来是因为这样的注册信息是无效的,发送给后台也不会存到数据库中;二来也可以减少点服务器的压力)
后台校验的目的主要是出于安全考虑,前台的校验使用一些手段是可以绕过的,但是后台校验是在服务器端做的,一般是无法绕过的。一个健全的项目都是存在后台校验的,只是后台校验的实现方式不一样。
我现在的单位后台校验的实现方式是使用框架实现的,原来应该是使用了AOP,将所有的请求配置到一个xml中,然后对每个请求再配置这个请求会带有哪些参数,这些参数是否是必传的,以及这些参数的正则表达式(校验)。原理就是请求在到达controller之前,先将请求拦截下来,拿到请求里带的参数,然后根据配置文件读取除这些参数的正则表达式做校验。只有当这个请求里的所有参数校验成功,才会顺利到达controller。这样controller就不用在对入参进行校验,可以直接使用,大大降低了代码的耦合度。
要不要对入参进行非空判断,取决于你的代码,如果入参为null会导致你的方法崩溃(抛出空指针异常),那么就要对参数进行非空判断,如果入参为null,对你的方法不产生任何影响,那么可以不用校验。
之所以checkValid方法没有对传进来的str(username和email)和type参数进行判空,是因为方法里的老师写的代码比较规范,不会因为str和type是null的时候,导致程序抛出控制在异常。首先str参数是被传到sql中执行的,及时是null也没关系,不会抛出异常。再说type如果是null,也不影响什么的。因为老师写的Const.EMAIL.equals(type)而不是type.equals(Const.EMAIL) 这个很关键!!!所以老师写的代码健壮性很好!老司机~~~哈哈
242018-05-01 -
星辰Iron
2018-04-23
你好同学,严格来说的确需要判空一下,另外非空判断也可以交给前端把控。
012018-04-27
相似问题