行业知识
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