采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
另外,对于传递进来的user对象,不需要校验它的另外一些成员变量是否为空吗?例如这几个成员变量:password,email,phone,question,answer,是否也是需要校验是否为空的呢?
校验分前台和后台两种校验
前台校验的目的主要是给普通用户用的,比如注册页面,在注册的时候前台校验用户是否输入了用户名,密码等必填字段,如果没有填,那么就不会将注册的请求发送给后台(一来是因为这样的注册信息是无效的,发送给后台也不会存到数据库中;二来也可以减少点服务器的压力)
后台校验的目的主要是出于安全考虑,前台的校验使用一些手段是可以绕过的,但是后台校验是在服务器端做的,一般是无法绕过的。一个健全的项目都是存在后台校验的,只是后台校验的实现方式不一样。
我现在的单位后台校验的实现方式是使用框架实现的,原来应该是使用了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) 这个很关键!!!所以老师写的代码健壮性很好!老司机~~~哈哈
谢谢,但是貌似不校验User user中的user有可能会报空指针异常?因为user.getUsername()
很好的问题,另外奶酪同学回答的非常非常棒,写了这么多字,真心赞用心!赞热情。
这里可以做一个校验的,有一点是因为我们在二期演进成全局异常了,所以这里就没做判断,同学完全可以做一个判断。
你好同学,严格来说的确需要判空一下,另外非空判断也可以交给前端把控。
为了防止直接掉接口,不应该必须在后台也判断下吗
登录后可查看更多问答,登录/注册
前后端分离,数据库接口设计,架构设计,功能开发,上线运维
10.2k 10
1.9k 22
1.4k 21
2.2k 21
2.0k 18