请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如图所示代码,在何时需要判断变量是否为空的疑问

//img1.sycdn.imooc.com//szimg/5add6f9a0001267910250548.jpg


另外,对于传递进来的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)  这个很关键!!!所以老师写的代码健壮性很好!老司机~~~哈哈

2 回复 有任何疑惑可以回复我~
  • 提问者 慕慕7598572 #1
    谢谢,但是貌似不校验User user中的user有可能会报空指针异常?因为user.getUsername()
    回复 有任何疑惑可以回复我~ 2018-04-28 09:12:40
  • Geely 回复 提问者 慕慕7598572 #2
    很好的问题,另外奶酪同学回答的非常非常棒,写了这么多字,真心赞用心!赞热情。
    回复 有任何疑惑可以回复我~ 2018-04-29 20:50:14
  • Geely 回复 提问者 慕慕7598572 #3
    这里可以做一个校验的,有一点是因为我们在二期演进成全局异常了,所以这里就没做判断,同学完全可以做一个判断。
    回复 有任何疑惑可以回复我~ 2018-04-29 20:51:10
星辰Iron 2018-04-23 22:19:37

你好同学,严格来说的确需要判空一下,另外非空判断也可以交给前端把控。

0 回复 有任何疑惑可以回复我~
  • 为了防止直接掉接口,不应该必须在后台也判断下吗
    回复 有任何疑惑可以回复我~ 2018-04-27 21:59:48
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信