美文网首页
2018-06-11

2018-06-11

作者: NicholasZhen | 来源:发表于2018-06-11 14:54 被阅读0次

    Controller 规范

    1.统一返回值, 返回AbstractBean或PageBean

    正确范例:

    /**
     * 获取国内省市区数据
     * @param modelMap
     * @param areaType
     * @param parentId
     * @return
     */
    @GetMapping("/getLocalAddressArea")
    @ResponseBody
    public AbstractBean getLocalAddressArea(ModelMap modelMap,Integer areaType,Integer parentId) {
        // 使用统一的返回值
        AbstractBean bean = new AbstractBean();
        try{
            List<AddressArea> data = null;
            if(0==areaType.intValue()){ // 所有省
                data = addressAreaService.getAllProvinceList();
            }else if(1==areaType.intValue()){ // 市
                data = addressAreaService.getAppointCityList(parentId);
            }else if(2==areaType.intValue()){ // 区
                data = addressAreaService.getAppointRegionList(parentId);
            }
            bean.setStatus(EnumSvrResult.OK.getVal());
            bean.setData(data);
            return bean;
        }catch(Exception e){
            bean.setStatus(EnumSvrResult.OK.getVal());
            bean.setMessage("获取国内省市区数据失败");
            e.printStackTrace();
            return bean;
        }
    }
    

    错误范例:

    @SuppressWarnings("rawtypes")
    @GetMapping("/getAddressArea")
    @ResponseBody
    public Map<String,Object> getAddressArea(ModelMap modelMap,String term) {
        // 不建议自定义返回值
        Map<String,Object> result = new HashMap<String,Object>();
        try{
            if(StringUtils.isBlank(term)){
                term = "广州市";
            }
            List data = templateExcelService.getByBasicAddressArea("addressArea", term);
            result.put("status",EnumSvrResult.OK.getVal());
            result.put("results",data);
            return result;
        }catch(Exception e){
            e.printStackTrace();
            result.put("status",EnumSvrResult.ERROR.getVal());
            return result;
        }
    }
    

    2. 尽量不在方法中直接进行异常处理并返回错误信息

    建议: Service中抛出BusinessRuntiemException, 由AOP拦截统一处理并返回错误信息, 继承BaseController类实现统一的异常处理

    错误范例:太多异常处理逻辑

    @RequestMapping(value = "save", method = RequestMethod.POST)
    @ResponseBody
    @SysOperationLog(functionName="发票明细-保存")
    @ApiDoc(AbstractBean.class)
    public AbstractBean save(InvoiceDetailVos vos) {
        AbstractBean bean = new AbstractBean();
        SysUser currentUser = SessionUtil.getCurrentUser();
        try {
            iTInvoiceDetailService.saveInvoiceDetails(vos, currentUser.getId(), currentUser.getUserName(),
                    currentUser.getCompany().getCompanyCode(), currentUser.getCompany().getCompanyName());
            bean.setStatus(EnumSvrResult.OK.getVal());
            bean.setMessage(EnumSvrResult.OK.getName());
        } catch (BusinessRuntimeException be) 
            // 不需要单独处理
            bean.setStatus(EnumSvrResult.ERROR.getVal());
            bean.setMessage(be.getErrReason());
        } catch (Exception e) {
            // 不需要单独处理
            e.printStackTrace();
            bean.setStatus(EnumSvrResult.ERROR.getVal());
            bean.setMessage(EnumSvrResult.ERROR.getName());
        }
        return bean;
    }
    

    3. 方法的入参和出参统一由AOP进行日志打印

    4. Controller做参数格式的转换,不允许把json,map这类对象传到Service去,也不允许Service返回json、map

    Service 规范

    异常处理规范

    1. 尽量用logger.error("操作+实体名称", e)打印异常信息

    正确范例:

    public void createXXX(){
        try {
           // 业务逻辑
        }
        catch (IOException ioe) {// 有必须处理的异常
            logger.error("新建XXX失败", ioe);
            throw new BusinessRuntimeException("", "新建XXX失败"); // 重新包装为业务异常
        }
    }
    

    2. Service中一般不处理业务异常,统一抛到Controller处理

    参考事项1中的正确范例

    3. 不建议try catch 一大段代码,应只针对可能出现异常的地方进行 try catch

    错误范例:

    public DmsResponse methodXXX (){
        try {
            // 一大段业务逻辑
        }
        catch (Exception e) {
            e.printStackTrace();
            return new DmsResponse(errCode, e.getMessage());
        }
    }
    

    4. 定时作业异常、后台执行代码出现的异常需要发送邮件或微信进行提醒

    5. 如果是以Dubbo方式调用, 统一在Dubbo的服务中进行异常处理并返回,不在下层Service中处理异常

    DmsQuotationService // 在该层处理异常
      -- QuoteQuotationService
    

    日志规范

    相关文章

      网友评论

          本文标题:2018-06-11

          本文链接:https://www.haomeiwen.com/subject/fnhheftx.html