请稍等 ...
×

采纳答案成功!

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

关于非空判断

感觉非空判断好像没有一套严格的规范,很多时候都忘了做,或者感觉很多地方完全没必要做
比如,下面这两个service层方法:
(1)为什么第一个方法不用对shopAuthId做非空判断,而第二个需要做非空判断,请问老师您判断的依据是什么,我们在写service层之前只写了dao层,所以是根据dao层来判断吗?还是根据具体的业务功能实现来决定?

(2)这里如果不做非空判断有可能会出现什么样的问题呢?以第二个方法为例,我是这么考虑的:这里调用的是dao层的updateShopAuthMap()方法,参数是shopAuthId,对应的数据库表的shop_auth_id列,这个列是必须非空的,如果传入空值的话会报错。如果按照这样理解的话,那么第一个方法也应该进行非空判断吧,所以这里很困惑,希望老师能够指点一下

@Override
public ShopAuthMap getShopAuthMapById(Long shopAuthId) {
    return shopAuthMapDao.queryShopAuthMapById(shopAuthId);
}



@Override
public ShopAuthMapExecution modifyShopAuthMap(ShopAuthMap shopAuthMap) throws ShopAuthMapOperationException {
    // 空值判断,主要是对授权Id做校验
    if (shopAuthMap == null || shopAuthMap.getShopAuthId() == null) {
        return new ShopAuthMapExecution(ShopAuthMapStateEnum.NULL_SHOPAUTH_ID);
    } else {
        try {
            shopAuthMap.setLastEditTime(new Date());
            int effectedNum = shopAuthMapDao.updateShopAuthMap(shopAuthMap);
            if (effectedNum <= 0) {
                return new ShopAuthMapExecution(ShopAuthMapStateEnum.INNER_ERROR);
            } else {// 创建成功
                return new ShopAuthMapExecution(ShopAuthMapStateEnum.SUCCESS, shopAuthMap);
            }
        } catch (Exception e) {
            throw new ShopAuthMapOperationException("modifyShopAuthMap error: " + e.getMessage());
        }
    }
}

正在回答

1回答

同学好,一般如果考虑把某一层单独提炼出来给第三方调用的话,就需要对必要的参数做判空校验,而必要的参数主要是由业务来确定的,再者就是那些如果为空就会导致程序出错的,得依据实际情况确定。第一个其实也应该判空,不然如果传入null就有可能会报错,第二个因为AuthId是必须的,所以肯定需要判空的

1 回复 有任何疑惑可以回复我~
  • 提问者 种苹果树的兔子 #1
    谢谢老师,其实按照正常的程序流程正常访问,authid都不会为null吧,非空判断主要避免有人通过非法手段进入页面修改信息所导致的错误吗,好像正常使用的话,很多非空判断都不会起到作用;还有就是非空判断一般在写的时候很难考虑周全吧,是不是很多时候要靠程序完成后再不断测试调试,然后在可能出现隐患的地方加上非空判断呢?在写service层时感觉很难考虑全面
    回复 有任何疑惑可以回复我~ 2020-12-25 08:17:29
  • 翔仔 回复 提问者 种苹果树的兔子 #2
    一般如果单独作为接口,提供给外部程序传参调用就要判空,底线是不能让程序被打挂,业务异常
    回复 有任何疑惑可以回复我~ 2020-12-26 00:44:56
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信