Java在MVC开发模式中使用try-catch以及throws避免踩坑

场景

1.throws是在方法上抛出异常,throw是在语句上抛出异常。

2.try-catch是在catch里处理try捕获异常并处理。

3.一般try-catch是在上层Controller中使用,而在Service以及dao层的接口上用throws向上级抛出异常。

避免踩坑:

在Controller中添加了try-catch,没有在sevice以及dao层添加throws,导致在dao层调用mapper文件中

某方法时在if标签中有错误时:

<if test="wmsReceiveOrder != null and wmsReceiveOrder.purchaseCode!=null and wmsReceiveOrder.purchaseCode!=''" >and ro.purchase_code=#{wmsReceiveOrder.purchaseCode} </if>

不会输出异常信息。

实现

1.在Controller层添加try-catch

   try {
           
            IPage<WmsReceiveOrderVO> page = receiveOrderService.pageTray(pageEntity, vo);
            Log.getInst(this).debug("doPageForRoleTable test:" + vo.getColumns().get(0).getSearch());
            return dataTablesResultJsonVO;
        } catch (Exception ex) {
            Log.getInst().debug("获取收货单数据接口:",ex);
            Log.getInst(this).debug("doPageForRoleTable test:" + vo.getColumns().get(0).getSearch());
            return dataTablesResultJsonVO;
        }

2.调用service层时,需要在service的接口上添加throws

public interface IWmsReceiveOrderService extends IService<WmsReceiveOrder> {

    IPage<WmsReceiveOrderVO> pageTray(Page<WmsReceiveOrderVO> page, DataTablesJsonVO vo)  throws Exception;
}

3.同样在dao层接口上也要添加throws

public interface IWmsReceiveOrderService extends IService<WmsReceiveOrder> {

    IPage<WmsReceiveOrderVO> pageTray(Page<WmsReceiveOrderVO> page, DataTablesJsonVO vo)  throws Exception;
}


4.其中Controller中分Log是在slf4j基础上封装的打印日志的工具类。

package com.ws.kernel.log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

public class Log {
    private static String logPrefix = " log -> ";
    private static Log instance;
    private static Logger logger = null;
    private static Map<Class, Logger> loggerList = new HashMap<Class, Logger>(); //用于缓存logger对象

    /**
     * 定义私有构造方法实现单例
     */
    private Log() {
    }

    /**
     * 功能说明:获取服务实例的静态方法
     * 修改说明:
     * @author badao
     * @date
     * @param obj 传入调用此方法的对象
     * @return
     */
    public synchronized static Log getInst(Object obj) {
        if (instance == null) {
            instance = new Log();
        }
        Log.logger = loggerList.get(obj.getClass());
        if (Log.logger == null) {
            Log.logger = LoggerFactory.getLogger(obj.getClass());
            //Log.logger = Logger.getLogger(obj.getClass());
            loggerList.put(obj.getClass(), Log.logger);
        }
        return instance;
    }

    /**
     * 功能说明:获取服务实例的静态方法
     * 修改说明:
     * @author baadao
     * @date
     * @param clazz 传入调用此方法的类型
     * @return
     */
    public synchronized static Log getInst(Class clazz) {
        if (instance == null) {
            instance = new Log();
        }
        Log.logger = loggerList.get(clazz);
        if (Log.logger == null) {
            Log.logger = LoggerFactory.getLogger(clazz);
            loggerList.put(clazz, Log.logger);
        }
        return instance;
    }

    /**
     * 功能说明:获取服务实例的静态方法
     * 修改说明:
     * @author badao
     * @date
     * @return
     */
    public synchronized static Log getInst() {
        if (instance == null) {
            instance = new Log();
        }
        Log.logger = loggerList.get(Log.class);
        if (Log.logger == null) {
            Log.logger = LoggerFactory.getLogger(Log.class);
            loggerList.put(Log.class, Log.logger);
        }
        return instance;
    }

    public void trace(String message) {
        Log.logger.trace(logPrefix + message);
    }

    public void trace(String message, Throwable t) {
        Log.logger.trace(logPrefix + message, t);
    }

    public void debug(String message) {
        Log.logger.debug(logPrefix + message);
    }

    public void debug(String message, Throwable t) {
        Log.logger.debug(logPrefix + message, t);
    }

    public void info(String message) {
        Log.logger.info(logPrefix + message);
    }

    public void info(String message, Throwable t) {
        Log.logger.info(logPrefix + message, t);
    }

    public void warn(String message) {
        Log.logger.warn(logPrefix + message);
    }

    public void warn(String message, Throwable t) {
        Log.logger.warn(logPrefix + message, t);
    }

    public void error(String message,Object... arguments) {
        Log.logger.error(logPrefix + message,arguments);
    }

    public void error(String message, Throwable t, Object... arguments) {
        Log.logger.error(logPrefix + message,t,arguments);
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值