zoukankan      html  css  js  c++  java
  • EurekaUser-返回类型和全局异常

    在项目里面加入统一的返回信息和异常处理

    新建 文件如下

    public interface BaseErrorInfoInterface {
        /**
         * 错误码
         */
        String getResultCode();
    
        /**
         * 错误描述
         */
        String getResultMsg();
    }
    public enum CommonEnum implements BaseErrorInfoInterface {
    
        // 数据操作错误定义
        BODY_NOT_MATCH("400", "请求的数据格式不符!"),
        SIGNATURE_NOT_MATCH("401", "请求的数字签名不匹配!"),
        NOT_FOUND("404", "未找到该资源!"),
        INTERNAL_SERVER_ERROR("500", "服务器内部错误!"),
        SERVER_BUSY("503", "服务器正忙,请稍后再试!");
    
        /**
         * 错误码
         */
        private String resultCode;
    
        /**
         * 错误描述
         */
        private String resultMsg;
    
        CommonEnum(String resultCode, String resultMsg) {
            this.resultCode = resultCode;
            this.resultMsg = resultMsg;
        }
    
        @Override
        public String getResultCode() {
            return resultCode;
        }
    
        @Override
        public String getResultMsg() {
            return resultMsg;
        }
    }
    public class BizException extends RuntimeException{
        private static final long serialVersionUID = 1L;
    
        /**
         * 错误码
         */
        protected String errorCode;
        /**
         * 错误信息
         */
        protected String errorMsg;
    
        public BizException() {
            super();
        }
    
        public BizException(BaseErrorInfoInterface errorInfoInterface) {
            super(errorInfoInterface.getResultCode());
            this.errorCode = errorInfoInterface.getResultCode();
            this.errorMsg = errorInfoInterface.getResultMsg();
        }
    
        public BizException(BaseErrorInfoInterface errorInfoInterface, Throwable cause) {
            super(errorInfoInterface.getResultCode(), cause);
            this.errorCode = errorInfoInterface.getResultCode();
            this.errorMsg = errorInfoInterface.getResultMsg();
        }
    
        public BizException(String errorMsg) {
            super(errorMsg);
            this.errorMsg = errorMsg;
        }
    
        public BizException(String errorCode, String errorMsg) {
            super(errorCode);
            this.errorCode = errorCode;
            this.errorMsg = errorMsg;
        }
    
        public BizException(String errorCode, String errorMsg, Throwable cause) {
            super(errorCode, cause);
            this.errorCode = errorCode;
            this.errorMsg = errorMsg;
        }
    
    
        public String getErrorCode() {
            return errorCode;
        }
    
        public void setErrorCode(String errorCode) {
            this.errorCode = errorCode;
        }
    
        public String getErrorMsg() {
            return errorMsg;
        }
    
        public void setErrorMsg(String errorMsg) {
            this.errorMsg = errorMsg;
        }
    
        public String getMessage() {
            return errorMsg;
        }
    
        @Override
        public Throwable fillInStackTrace() {
            return this;
        }
    
    }
    @ControllerAdvice
    public class GlobalExceptionHandler {
    
        private Logger logger = LoggerFactory.getLogger(this.getClass());
    
        /**
         * 处理自定义的业务异常
         *
         * @param req
         * @param e
         * @return
         */
        @ExceptionHandler(value = BizException.class)
        @ResponseBody
        public BasicResult bizExceptionHandler(HttpServletRequest req, BizException e) {
            logger.error("发生业务异常e:{}", e.getMessage());
            return BasicResult.fail(e.getErrorCode(), e.getErrorMsg());
        }
    
        /**
         * 处理空指针的异常
         *
         * @param req
         * @param e
         * @return
         */
        @ExceptionHandler(value = NullPointerException.class)
        @ResponseBody
        public BasicResult exceptionHandler(HttpServletRequest req, NullPointerException e) {
            logger.error("发生空指针异常e:{}", e.getMessage());
            return BasicResult.fail(e.getMessage());
        }
    
        /**
         * 处理其他异常
         *
         * @param req
         * @param e
         * @return
         */
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public BasicResult exceptionHandler(HttpServletRequest req, Exception e) {
            logger.error("未知异常e:{}", e.getMessage());
            return BasicResult.fail(e.getMessage());
        }
    
        /**
         * 处理所有接口数据验证异常
         *
         * @param e
         * @return
         */
        @ExceptionHandler(MethodArgumentNotValidException.class)
        @ResponseBody
        public BasicResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
            logger.error("数据绑定异常e:{}", e.getMessage());
            return BasicResult.fail(e.getMessage());
        }
    
        /**
         * 请求类型异常
         *
         * @param e
         * @return
         */
        @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
        @ResponseBody
        public BasicResult httpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
            logger.error("请求类型异常e:{}", e.getMessage());
            return BasicResult.fail(e.getMessage());
        }
    
        /**
         * 数据绑定异常
         *
         * @param e
         * @return
         */
        @ExceptionHandler(MissingServletRequestParameterException.class)
        @ResponseBody
        public BasicResult missingServletRequestParameterException(MissingServletRequestParameterException e) {
            logger.error("数据绑定异常e:{}", e.getMessage());
            return BasicResult.fail(CommonEnum.BODY_NOT_MATCH.getResultMsg());
        }
    }
    public class BasicResult<T> {
    
        private T data;
        private Long total;
        public Boolean success;
    
        /**
         * 返回状态码
         */
        private String code;
        /**
         * 返回消息
         */
        private String message;
        /**
         * 异常堆栈
         */
        private String fullStackTrace;
    
        private final static String SUCCESS_CODE = "0";
        private final static String DEFAULT_FAIL_CODE = "-1";
    
        public Boolean getSuccess() {
            return success;
        }
    
        public void setSuccess(Boolean success) {
            this.success = success;
        }
    
        public boolean isSuccess() {
            return Objects.equals(BasicResult.SUCCESS_CODE, this.code);
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public String getFullStackTrace() {
            return fullStackTrace;
        }
    
        public void setFullStackTrace(String fullStackTrace) {
            this.fullStackTrace = fullStackTrace;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
        public Long getTotal() {
            return total;
        }
    
        public void setTotal(Long total) {
            this.total = total;
        }
    
    
        /**
         * 成功
         *
         * @return
         */
        public static BasicResult success() {
            BasicResult basicResult = new BasicResult();
            basicResult.setCode(SUCCESS_CODE);
            return basicResult;
        }
    
        /**
         * 成功
         *
         * @param data
         * @param <T>
         * @return
         */
        public static <T> BasicResult<T> success(T data) {
            BasicResult<T> basicResult = new BasicResult<>();
            basicResult.setCode(SUCCESS_CODE);
            basicResult.setData(data);
            return basicResult;
        }
    
        /**
         * 成功
         *
         * @param data
         * @param message
         * @param <T>
         * @return
         */
        public static <T> BasicResult<T> success(T data, String message) {
            BasicResult<T> basicResult = new BasicResult<>();
            basicResult.setCode(SUCCESS_CODE);
            basicResult.setMessage(message);
            basicResult.setData(data);
            return basicResult;
        }
    
        /**
         * 成功
         *
         * @param data
         * @param <T>
         * @return
         */
        public static <T> BasicResult<T> success(T data, long total) {
            BasicResult<T> basicResult = new BasicResult<>();
            basicResult.setCode(SUCCESS_CODE);
            basicResult.setData(data);
            basicResult.setTotal(total);
            return basicResult;
        }
    
        /**
         * 成功
         *
         * @param data
         * @param message
         * @param <T>
         * @return
         */
        public static <T> BasicResult<T> success(T data, String message, Boolean success) {
            BasicResult<T> basicResult = new BasicResult<>();
            basicResult.setCode(SUCCESS_CODE);
            basicResult.setMessage(message);
            basicResult.setData(data);
            basicResult.setSuccess(success);
            return basicResult;
        }
    
        /**
         * 成功
         *
         * @param data
         * @param total
         * @param <T>
         * @return
         */
        public static <T> BasicResult<T> success(T data, Long total) {
            BasicResult<T> basicResult = new BasicResult<>();
            basicResult.setCode(SUCCESS_CODE);
            basicResult.setData(data);
            basicResult.setTotal(total);
            return basicResult;
        }
    
        /**
         * 失败
         *
         * @param code
         * @param <T>
         * @return
         */
        static <T> BasicResult<T> fail(String code, Throwable throwable) {
            BasicResult<T> basicResult = new BasicResult<>();
            basicResult.setCode(code);
            basicResult.setMessage(throwable.getMessage());
            basicResult.setFullStackTrace(JSON.toJSONString(throwable));
            return basicResult;
        }
    
        /**
         * 失败
         *
         * @param code
         * @param <T>
         * @return
         */
        public static <T> BasicResult<T> fail(String code, String message) {
            BasicResult<T> basicResult = new BasicResult<>();
            basicResult.setCode(code);
            basicResult.setMessage(message);
            return basicResult;
        }
    
    
        /**
         * 失败
         *
         * @param message
         * @param <T>
         * @return
         */
        public static <T> BasicResult<T> fail(String message) {
            BasicResult<T> basicResult = new BasicResult<>();
            basicResult.setCode(DEFAULT_FAIL_CODE);
            basicResult.setMessage(message);
            return basicResult;
        }
    
        /**
         * 失败
         *
         * @param throwable
         * @param <T>
         * @return
         */
        static <T> BasicResult<T> fail(Throwable throwable, Boolean isFull) {
            BasicResult<T> basicResult = new BasicResult<>();
            basicResult.setCode("500");
            basicResult.setMessage("系统出错啦");
            if (isFull) {
                basicResult.setFullStackTrace(JSON.toJSONString(throwable));
            } else {
                basicResult.setFullStackTrace(throwable.getMessage());
            }
            return basicResult;
        }
    }

    其中需要对UserAction类进行改造,让我们去访问的时候会被对应的异常捕获

    @RestController
    @RequestMapping("/user")
    public class UserAction {
    
        private Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Value("${server.port}")
        String port;
    
        @Resource
        private UserMapper userMapper;
    
        @PostMapping("/hi")
        public BasicResult<String> hi(@RequestParam String name) {
            logger.info("----- selectAll method test ------");
            List<User> userList = userMapper.selectList(null);
            logger.info("userList:{}", JSON.toJSON(userList));
            return BasicResult.success("hi " + name + ",i am from port:" + port);
        }
    
        @GetMapping("/getUser")
        public BasicResult<String> getUser(@RequestParam Integer name) {
            logger.info("----- selectAll method test ------");
            List<User> userList = userMapper.selectList(null);
            logger.info("userList:{}", JSON.toJSON(userList));
            return BasicResult.success("hi " + name + ",i am from port:" + port);
        }
    }
    BasicResult 是包装的统一返回信息。
    GlobalExceptionHandler是程序异常的时候对异常的捕获,然后返回对应的错误信息。
    BizException是自定义的系统异常。
    启动项目,浏览器访问http://127.0.0.1:10001/user/hi

    控制台输出如图

    异常会在HttpRequestMethodNotSupportedException进行处理,然后返回给用户设置的统一的数据格式。

    返回格式如下

  • 相关阅读:
    一个网络扫描程序
    ASCII
    一个linux下c++程序
    VC数字图像处理编程
    人际关系的55个绝招
    一些函数
    【转】Vim命令合集以及乱码问题解决
    【转】PHP程序员的技术成长规划
    【转】Nginx 服务器安装及配置文件详解
    【转】PHP网站常见安全漏洞,及相应防范措施总结
  • 原文地址:https://www.cnblogs.com/yinduang/p/15011198.html
Copyright © 2011-2022 走看看