HandlerExceptionResolver 全局异常

全局异常,出现异常时,两种场景

返回统一的错误页面。页面跳转


    ```
### 返回json数据,页面不跳转,比如提示系统异常,请重试。

```java
public class GlobalExceptionResolver implements HandlerExceptionResolver
{
    private final static Logger LOGGER = LoggerFactory
        .getLogger(IntentionServiceImpl.class);

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
        Exception ex)
    {
       LOGGER.error("ExternalRPCException--ex:{}", ex);
        Result result = new Result();
        result.setSuccess(false);
        if (ex instanceof ExternalRPCException)
        {
            ExternalRPCException exception = (ExternalRPCException)ex;
            // int-->String ??
            result.setResultCode(ConvertUtil.strToInt(exception.getCode(), 0));
            result.setInfo(MessageSourceHelper.getMessage(exception.getCode()));
        }
        else
        {//统一系统异常
            result.setCode("80000");
            result.setInfo(MessageSourceHelper.getMessage("80000"));
        }
        response(result, response);
        //跳转到error视图
//        ModelAndView modelAndView = new ModelAndView();
//        modelAndView.addObject("result",result);
//        modelAndView.setViewName("error/error");
        return new ModelAndView();
/**
* 主要是靠response.getWriter().flush();来实现。
* 可以实现一些eccdoe,
* HttpServletResponse  就可以实现一些header的属性设置等
/
private void response(Result result, HttpServletResponse response)
    {
        ModelMap modelMap = new ModelMap();
        Writer writer = null;
        try
        {
            writer = response.getWriter();
            result.flush(modelMap);//encode
            writer.write(JsonUtils.getJsonFromBean(modelMap));
            writer.flush();
        }
        catch (Exception e)
        {
            LOGGER.error("Execute responseexception:{}", e);
        }
        finally
        {
            IOUtils.closeQuietly(writer);
        }

代码中的Result 就是一个Map对象。换成其他任何对象都是一样的。一般都是统一接口的ResponseVO对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值