zoukankan      html  css  js  c++  java
  • 分布式系统工具类

    package com.box.common.core.exception;

    import com.box.common.core.enums.ErrorCodeEnum;
    import com.box.common.core.rt.Result;
    import com.box.common.core.utils.StringUtils;
    import feign.FeignException;
    import feign.RetryableException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.http.converter.HttpMessageNotReadableException;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.HttpRequestMethodNotSupportedException;
    import org.springframework.web.bind.MethodArgumentNotValidException;
    import org.springframework.web.bind.MissingServletRequestParameterException;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    import org.springframework.web.servlet.NoHandlerFoundException;
    import org.springframework.web.util.NestedServletException;

    import javax.servlet.http.HttpServletRequest;
    import javax.validation.ConstraintViolationException;
    import java.util.Objects;

    @RestControllerAdvice
    public class GlobalExceptionHandler {
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);


    @ExceptionHandler(value = OrderException.class)
    public Result orderExceptionHandler(HttpServletRequest req, OrderException e) {
    logger.info("订单异常!", e);
    return Result.fail(e.getCode(), e.getMsg());
    }

    /**
    * 处理自定义的业务异常
    *
    * @param req
    * @param e
    * @return
    */
    @ExceptionHandler(value = AuthException.class)
    public Result authExceptionHandler(HttpServletRequest req, AuthException e) {
    logger.info("用户登陆验证异常!", e);
    return Result.fail(e.getCode(), e.getMsg());
    }


    /**
    * 处理feign ok http 请求错误
    *
    * @param req
    * @param e
    * @return
    */
    @ExceptionHandler(value = RetryableException.class)
    public Result feignServiceExceptionHandler(HttpServletRequest req, RetryableException e) {
    logger.error("Feign 调用接口发生业务异常!", e);
    if(e.getCause() instanceof FeignServiceException){
    FeignServiceException feignServiceException = (FeignServiceException) e.getCause();
    return Result.fail(feignServiceException.getCode(), feignServiceException.getMsg());
    }
    return Result.fail(ErrorCodeEnum.SERVER.getCode(), ErrorCodeEnum.SERVER.getMessage());

    }


    /**
    * 处理自定义的业务异常
    *
    * @param req
    * @param e
    * @return
    */
    @ExceptionHandler(value = ServiceException.class)
    public Result mallServiceExceptionHandler(HttpServletRequest req, ServiceException e) {
    logger.error("服务端发生业务异常!", e);
    return Result.fail(e.getCode(), e.getMessage());
    }


    /**
    * 处理空指针的异常
    *
    * @param req
    * @param e
    * @return
    */
    @ExceptionHandler(value = NullPointerException.class)
    public Result exceptionHandler(HttpServletRequest req, NullPointerException e) {
    logger.error("发生空指针异常!", e);
    return Result.fail(e.getMessage());
    }

    /**
    * 处理其他异常
    *
    * @param req
    * @param e
    * @return
    */
    @ExceptionHandler(value = Exception.class)
    public Result exceptionHandler(HttpServletRequest req, Exception e) {
    logger.error("未知异常!", e);
    return Result.fail(ErrorCodeEnum.FAIL.getMessage());
    }

    /**
    * 参数验证
    *
    * @return
    */
    @ExceptionHandler(ConstraintViolationException.class)
    public Result constraintViolationExceptionHandle(ConstraintViolationException e) {
    //login.password: 请输入密码, login.account: 请输入账号
    String[] arrays = e.getMessage().split(",");
    StringBuffer msg = new StringBuffer();
    for (String array : arrays) {
    msg.append(array.split(":")[1]).append(",");
    }
    logger.info("请求参数验证错误1:{}", e.getMessage());
    return Result.fail(ErrorCodeEnum.CHECK_PARAM.getCode(), msg.deleteCharAt(msg.length()-1).toString());
    }




    /**
    * 参数验证
    *
    * @return
    */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result methodArgumentNotValidExceptionHandle(MethodArgumentNotValidException e) {
    logger.info("请求参数验证错误2:{}", e.getMessage());
    BindingResult bindingResult = e.getBindingResult();
    String msg = Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage();
    return Result.fail(ErrorCodeEnum.CHECK_PARAM.getCode(), msg);
    }

    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public Result httpRequestMethodNotSupportedExceptionHandle(HttpRequestMethodNotSupportedException e) {
    logger.error("请求方式错误", e);
    return Result.fail(ErrorCodeEnum.REQUEST_NOT_METHOD.getCode(),e.getMessage());
    }

    @ExceptionHandler(NoHandlerFoundException.class)
    public Result noHandlerFoundExceptionExceptionHandle(NoHandlerFoundException e) {
    logger.error("请求方式错误", e);
    return Result.fail(ErrorCodeEnum.REQUEST_NOT_METHOD.getCode(),e.getMessage());
    }

    @ExceptionHandler(HttpMessageNotReadableException.class)
    public Result httpMessageNotReadableExceptionHandle(HttpMessageNotReadableException e) {
    logger.error("数据格式转换错误", e);
    return Result.fail(ErrorCodeEnum.PARAM_CONVERSION_ERROR.getCode(),ErrorCodeEnum.PARAM_CONVERSION_ERROR.getMessage());
    }


    }




    小蚊子大人
  • 相关阅读:
    汽车发动机参数指标含义
    谷歌浏览器Google Chrome和Adobe Flash Plugins插件安装问题
    今天研究成功ASP动态管理数据表及字段
    漂亮的弹出对话框!
    Opera Dragonfly 提供下载了
    javascript客户端验证函数大全
    C# Regex类用法
    只能输入数字的TextBox
    c#,winform,treeview,选中节点,选中相应的全部子节点,取消节点,取消父节点,小技巧
    WinForm中如何判断关闭事件来源于用户点击右上角的“关闭”按钮
  • 原文地址:https://www.cnblogs.com/ywsheng/p/14976062.html
Copyright © 2011-2022 走看看