• (办公)springboot配置全局异常


       项目用到了springboot,本来很高兴,但是项目里什么东西都没有,验证,全局异常这些都需要自己区配置。最近springboot用的还是蛮多的,我还是做事情,把经验发表一下.全局统一的异常,首先异常的返回值和正常返回的返回值应该统一json.返回值的code和msg可以用enum保存起来,controller层的方法抛出异常.下面看代码.

          

    package com.lianrong.system.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.converter.HttpMessageNotReadableException;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.ResponseStatus;
    
    import com.lianrong.system.constants.MessageConstant;
    import com.lianrong.system.base.SimpleServiceResult;
    import com.lianrong.system.exception.ServiceException;
    
    @ControllerAdvice
    public class AdviceController {
        private static final Logger logger = LoggerFactory.getLogger(AdviceController.class);
    
        @ExceptionHandler(ServiceException.class)
        @ResponseBody
        public SimpleServiceResult handlerException(ServiceException e) {
            logger.warn("预知异常", e);
            //SimpleServiceResult jsonResult = new SimpleServiceResult();
            //jsonResult.setStatus(false);
            //jsonResult.addMsg(MessageConstant.E0000_9999, e.getMessage());
            return SimpleServiceResult.error500(e.getMessage());
        }
    
        @ExceptionHandler(HttpMessageNotReadableException.class)
        @ResponseBody
        @ResponseStatus(value= HttpStatus.BAD_REQUEST)
        public SimpleServiceResult handlerException(HttpMessageNotReadableException e) {
            logger.error("服务器未能理解请求!", e);
            //SimpleServiceResult jsonResult = new SimpleServiceResult();
            //jsonResult.setStatus(false);
            //jsonResult.addMsg(MessageConstant.E0000_0502, "服务器未能理解请求!");
            return SimpleServiceResult.error500("服务器未能理解请求!");
        }
    
        @ExceptionHandler(Exception.class)
        @ResponseBody
        public SimpleServiceResult handlerException(Exception e) {
            logger.error("运行时异常", e);
            //SimpleServiceResult jsonResult = new SimpleServiceResult();
            //jsonResult.setStatus(false);
            //jsonResult.addMsg(MessageConstant.E0000_9999, "运行时异常");
            return SimpleServiceResult.error500("运行时异常");
        }
    }
    package com.lianrong.system.exception;
    
    public class ServiceException extends  RuntimeException {
    
        private static final long serialVersionUID = 1L;
    
        public ServiceException(String message) {
            super(message);
        }
    }
    package com.imooc.shoptest001.handle;
    
    import com.imooc.shoptest001.utils.JsonData;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    /**
     * 全局异常捕获
     */
    @ControllerAdvice
    public class ExceptionHandle {
    
        /**
         * ExceptionHandler 捕获什么异常
         * ResponseBody 返回json格式
         * @return
         */
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public JsonData handle(Exception ex){
            ex.printStackTrace();
            System.out.println(ex.toString());
            return JsonData.error500(ex.getMessage());
        }
    }

          

    package com.imooc.shoptest001.utils;
    
    public enum JsonDataEnum {
        ERROR(-1,"失败"),
        SUCCESS(0,"成功"),
        ;
        private Integer code;
    
        private String msg;
    
        JsonDataEnum(Integer code,String msg){
            this.code = code;
            this.msg = msg;
        }
    
        public Integer getCode() {
            return code;
        }
    
        public String getMsg() {
            return msg;
        }
    }
    package com.imooc.shoptest001.utils;
    
    /**
     * 前台返回json类
     */
    public class JsonData<T> {
        /**
         * 返回状态
         */
        private boolean status;
        /**
         * 错误码/正确码
         */
        private Integer code;
        /**
         * 消息.
         */
        private String msg;
        /**
         * 具体的内容.
         */
        private T data;
    
        public static JsonData success(String msg,Object data){
            JsonData jsonData = new JsonData();
            jsonData.setMsg(msg);
            jsonData.setStatus(true);
            jsonData.setCode(200);
            jsonData.setData(data);
            return jsonData;
        }
    
        public static JsonData ok(){
            JsonData jsonData = new JsonData();
            jsonData.setStatus(true);
            jsonData.setCode(200);
            return jsonData;
        }
    
        public static JsonData error(Integer code,String msg){
            JsonData jsonData = new JsonData();
            jsonData.setStatus(false);
            jsonData.setCode(code);
            jsonData.setMsg(msg);
            return jsonData;
        }
    
        public static JsonData error500(String msg){
            JsonData jsonData = new JsonData();
            jsonData.setStatus(false);
            jsonData.setCode(500);
            jsonData.setMsg(msg);
            return jsonData;
        }
    
    
    
        public boolean isStatus() {
            return status;
        }
    
        public void setStatus(boolean status) {
            this.status = status;
        }
    
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    }

          另外自己写了一个jsonData返回类

    package com.lianrong.system.base;
    
    import java.io.Serializable;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 返回json的工具类.
     */
    public class JsonData implements Serializable {
    
        private static final long serialVersionUID = -1140504575505840707L;
        /**
         * 请求结果正不正常.
         */
        private boolean status;
        /**
         * 消息.
         */
        private String msg;
        /**
         * 返回码
         */
        private int code;
        /**
         * 数据:
         */
        private Object data;
    
        public JsonData(boolean status){
            this.status = status;
        }
    
        public JsonData(boolean status,int code){
            this.status = status;
        }
    
        public static JsonData success(Object object,String msg){
            JsonData jsondata = new JsonData(true);
            jsondata.data = object;
            jsondata.code = 200;
            jsondata.msg = msg;
            return jsondata;
        }
    
        public static JsonData success(Object object){
            JsonData jsondata = new JsonData(true);
            jsondata.data = object;
            jsondata.code = 200;
            return jsondata;
        }
    
        public static JsonData success(){
            return new JsonData(true,200);
        }
    
    
        public static JsonData error(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.msg = msg;
            return jsondata;
        }
    
        public static JsonData error500(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 500;
            jsondata.msg = msg+",请求未完成。服务器遇到不可预知的情况。";
            return jsondata;
        }
    
        public static JsonData error501(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 501;
            jsondata.msg = msg+",请求未完成。服务器不支持所请求的功能。";
            return jsondata;
        }
    
        public static JsonData error502(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 502;
            jsondata.msg = msg+",请求未完成。服务器从上游服务器收到一个无效的响应。";
            return jsondata;
        }
    
        public static JsonData error503(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 503;
            jsondata.msg = msg+",请求未完成。服务器临时过载或当机。";
            return jsondata;
        }
    
    
        public static JsonData error504(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 504;
            jsondata.msg = msg+",网关超时。";
            return jsondata;
        }
    
    
        public static JsonData error401(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 401;
            jsondata.msg = msg+",被请求的页面需要用户名和密码。";
            return jsondata;
        }
    
        public static JsonData error402(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 402;
            jsondata.msg = msg+",此代码尚无法使用。";
            return jsondata;
        }
    
        public static JsonData error403(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 403;
            jsondata.msg = msg+",对被请求页面的访问被禁止。";
            return jsondata;
        }
    
        public static JsonData error404(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 404;
            jsondata.msg = msg+",服务器无法找到被请求的页面。";
            return jsondata;
        }
    
        public static JsonData error406(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 406;
            jsondata.msg = msg+",服务器生成的响应无法被客户端所接受。";
            return jsondata;
        }
    
        public static JsonData error505(String msg){
            JsonData jsondata = new JsonData(false);
            jsondata.code = 505;
            jsondata.msg = msg+",服务器不支持请求中指明的HTTP协议版本。";
            return jsondata;
        }
    
    
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        public boolean isStatus() {
            return status;
        }
    
        public void setStatus(boolean status) {
            this.status = status;
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public Map<String,Object> toMap(){
            HashMap<String,Object> result = new HashMap<String,Object>();
            result.put("status",status);
            result.put("msg",msg);
            result.put("code",code);
            result.put("data",data);
            return result;
        }
    
    }
  • 相关阅读:
    web网站接入谷歌登录
    ThinkPHP网页端网站应用接入微信登录
    [卡特兰数]
    KALI LINUX 工具大全概览(长期更新中。。。)
    如何使用burp suite 来pj验证码
    windows小技巧(长期更新)
    如何关闭火绒自启动
    VMware USB Arbitration Service服务-错误3:系统找不到指定的路径
    windows下的burpsuite v2021.7 安装与配置
    拿到一台新window应该做些什么事
  • 原文地址:https://www.cnblogs.com/historylyt/p/10588658.html
Copyright © 2020-2023  润新知