小工具知识网

当前位置: 首页 > 行业知识 > springCloud统一响应、全局异常处理

行业知识

springCloud统一响应、全局异常处理

2026-11-09 04:16:52 来源:互联网转载

���录

()

1.父工程pom

2.全局异常捕获pom依赖

()

3.注解类

4.定义统一响应拦截

5.统一响应类

6.全局异常捕获类

7.使用


1.父工程pom

                Hoxton.SR8                2.2.4.RELEASE                                    org.projectlombok            lombok            1.16.18                            org.springframework.boot            spring-boot-starter-test            test                            org.springframework.boot            spring-boot-starter-actuator                            org.apache.commons            commons-lang3            3.11                            org.apache.commons            commons-collections4            4.4                                    cn.hutool            hutool-all            5.6.0                                    io.jsonwebtoken            jjwt-api            0.10.5                            io.jsonwebtoken            jjwt-impl            0.10.5            runtime                            io.jsonwebtoken            jjwt-jackson            0.10.5            runtime                            com.alibaba            fastjson            1.2.47                                                                    org.springframework.cloud                spring-cloud-dependencies                ${spring-cloud.version}                pom                import                                                    com.alibaba.cloud                spring-cloud-alibaba-dependencies                ${spring-cloud-alibaba.version}                pom                import                                                    spring-milestones            Spring Milestones            https://repo.spring.io/milestone                            false                        

2.全局异常捕获pom依赖

                    org.springframework.boot            spring-boot-starter-web        

3.注解类

import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 忽略统一相应注解定义:使用该注解的类和方法忽略统一响应 */@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface IgnoreResponseAdvice {}

4.定义统一响应拦截

import xx.xx.IgnoreResponseAdvice;import xx.xx.vo.CommonResponse;import org.springframework.core.MethodParameter;import org.springframework.http.MediaType;import org.springframework.http.converter.HttpMessageConverter;import org.springframework.http.server.ServerHttpRequest;import org.springframework.http.server.ServerHttpResponse;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestControllerAdvice;import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;/** * 实现统一响应 */@RestControllerAdvice(value = {"xx.xxx"})public class CommonResponseDataAdvice implements ResponseBodyAdvice {    /**     * 判断是否需要对相应处理     * @param methodParameter     * @param aClass     * @return     */    @Override    @SuppressWarnings("all")    public boolean supports(MethodParameter methodParameter, Class> aClass) {        //判断是否需要对响应数据进行处理        //类        if(methodParameter.getDeclaringClass().isAnnotationPresent(IgnoreResponseAdvice.class)){            return false;        }        //方法        if(methodParameter.getMethod().isAnnotationPresent(IgnoreResponseAdvice.class)){            return false;        }        //为true beforeBodyWrite        return true;    }    /**     *     * @param o 响应对象     * @param methodParameter     * @param mediaType     * @param aClass     * @param serverHttpRequest     * @param serverHttpResponse     * @return     */    @Override    public Object beforeBodyWrite(Object o,                                  MethodParameter methodParameter,                                  MediaType mediaType,                                  Class> aClass,                                  ServerHttpRequest serverHttpRequest,                                  ServerHttpResponse serverHttpResponse) {        //定义最终返回对象        CommonResponse response = new CommonResponse(200,"");        if(null == o){            return response;        }else if(o instanceof CommonResponse){            response=(CommonResponse) o;            return response;        }else{            //将o设置为返回对象中的o            response.setData(o);        }        return response;    }}

5.统一响应类

package xx.xx.vo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;/** * 通用相应对象定义 * { * "code":200, * "msg":"", * "data":{} * } */@Data//无参构造函数@NoArgsConstructor//有参构造函数@AllArgsConstructorpublic class CommonResponse implements Serializable {    /**     * 错误码     */    private Integer code;    /**     * 错误信息     */    private String msg;    /**     * 泛型响应数据     */    private T data;    public CommonResponse(Integer code, String msg) {        this.code = code;        this.msg = msg;    }}

6.全局异常捕获类

package xx.xx.advice;import xx.xx.CommonResponse;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestControllerAdvice;import javax.servlet.http.HttpServletRequest;/** * 全局异常捕获处理 */@Slf4j@RestControllerAdvicepublic class GlobalExceptionAdvice {    /**     * Exception.class 捕获的class类型     * @param req     * @param ex     * @return     */    @ExceptionHandler(value = Exception.class)    public CommonResponse handlerCommerceException(HttpServletRequest req,            Exception ex) {        CommonResponse response = new CommonResponse(-1,"business error");        response.setData(ex.getMessage());        log.error("commerce service has error:[{}]",ex.getMessage(),ex);        return response;    }}

7.使用

在web项目中引入该依赖即可,注意包名    XX.xx    cloud-mvc-config    1.0-SNAPSHOT

上一篇:小艺下载攻略,一键获取下载链接,轻松体验

下一篇:易企秀微支付接入指南,轻松实现支付功能,助力业务飞速发展!