Skip to content

统一异常处理

sqmax edited this page Jan 13, 2019 · 10 revisions

当微信端访问创建订单的接口时,订单创建成功返回给前端的结果如下。

13.PNG

但如果商品不存在,因为在创建订单的业务类中抛出了一个运行时异常,

ProductInfo productInfo=productService.findOne(orderDetail.getProductId());
if(productInfo==null){
   throw new SellException(ResultEnum.PRODUCT_NOT_EXIT);
}

返回给前端的就是一些的没有价值的信息: 15.PNG

而我们希望,不管创建订单成功还是失败,我们最好返回给前端一个统一的结果(即包含code、data、msg这三个数据)。我们可以像对待登录一样,在异常处理类SellerExceptionHandler中,对抛出的SellException异常进行一下的处理。

    @ExceptionHandler(value = SellException.class)
    @ResponseBody
    public ResultVO handlerSellerException(SellException e){
        return ResultVOUtil.error(e.getCode(),e.getMessage());
    }

其中ResultVOUtil是一个工具类,对后端返回数据做统一处理,如下:

public class ResultVOUtil {

    public static ResultVO success(Object object){
        ResultVO resultVO=new ResultVO();
        resultVO.setData(object);
        resultVO.setCode(0);
        resultVO.setMsg("成功");
        return resultVO;
    }

    public static ResultVO success(){
        return success(null);
    }

    public static ResultVO error(Integer code,String msg){
        ResultVO resultVO=new ResultVO();
        resultVO.setCode(code);
        resultVO.setMsg(msg);
        return resultVO;
    }
}

这样即使创建订单失败,也会相应给前端一个比较统一的返回结果(错误码+错误描述)。 14.PNG