java - 到底应该在action里面捕捉异常还是在service里面捕捉异常?
高洛峰
高洛峰 2017-04-17 16:40:23
[Java讨论组]

比如我这一段service中的代码,到底是否应该在整个service方法里面用一个trycatch将所有代码全包裹起来,还是在调用的地方捕捉一下?

public ResultBean<VenueCardResponseEntity> getVenueCardList(VenueCardRequestEntity venueCard) {
        ResultBean<VenueCardResponseEntity> bean = new ResultBean<VenueCardResponseEntity>();
        String queryVenueCardListResultStr = super.getRPCVenueServiceInstance().queryVenueCardList(JSON.toJSONString(venueCard));
        if(StringUtils.isBlank(queryVenueCardListResultStr)){
            bean.setCode(ErrorEnum.ERR_500.getIndex());
            bean.setMsg("查询失败,服务层未返回结果!");
            return bean;
        }
        PageDto<String> queryVenueCardPageDto;
        List<VenueCardResponseEntity> venueCardList;
        try {
            ResultDto<String> queryVenueCardListResult = JSON.parseObject(queryVenueCardListResultStr,ResultDto.class);
            if(!ErrorEnum.SUCCESS_200.getLongIndex().equals(queryVenueCardListResult.getCode())){
                bean.setCode(queryVenueCardListResult.getCode());
                bean.setMsg(queryVenueCardListResult.getErrMsg());
                return bean;
            }
            queryVenueCardPageDto = JSON.parseObject(queryVenueCardListResult.getObject(),PageDto.class);
            if(!(queryVenueCardPageDto.getTotalItems() > Long.parseLong("0"))){
                bean.setCode(ErrorEnum.SUCCESS_200.getIndex());
                bean.setMsg("未查询到符合条件的数据!");
                return bean;
            }
            venueCardList = JSON.parseArray(queryVenueCardPageDto.getResult2(), VenueCardResponseEntity.class);
        } catch (JSONException e) {
            bean.setCode(ErrorEnum.ERR_500.getIndex());
            bean.setMsg("查询失败,解析服务层返回值异常!");
            return bean;
        }
        bean.setCode(ErrorEnum.SUCCESS_200.getIndex());
        bean.setMsg("查询成功");
        bean.setSuccess(true);
        bean.setRows(venueCardList);
        bean.setTotal(queryVenueCardPageDto.getTotalItems());
        return bean;
    }

我在解析JSON的时候,try catch一下,只捕捉JSONException,是否还应该再包裹一层捕捉exception的trycatch呢?
还是应该在action调用这个service时捕捉一下??

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
黄舟

service建议只处理业务异常,捕获持久层或其往下一层的异常,并将其转换为service层的异常,视情况抛出。action调用时捕获所有异常做相应处理。

PHP中文网

跟这个问题如出一辙:http://segmentfault.com/q/1010000004166896?_ea=514793

参考那边的回答吧

PHP中文网

action不应该捕获services层的异常
services应该处理好自己的业务逻辑,放回一个结果对象,在结果对象中告诉调用方services执行的结果及返回的数据内容。
dao层也是同样处理~

这样接口清晰~,要不你的告诉你的调用方我可能会抛出什么的异常,什么样的异常代表什么样的业务含义

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号