SpringClound全局异常处理
在搭建SpringClound处理异常时,走了不少弯路,目前在zuul网关定义了异常捕获,其它的子项目直接引入即可,这样处理起来自己认为是最简单的做法:
一、项目结构如下:
二、在zuul服务中,用@ControllerAdvice和@ExceptionHandler(value = Exception.class)注解使用。
@ControllerAdvice
@Slf4j
public class ExceptionError {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result defaultErrorHandler(HttpServletRequest req, HttpServletResponse resp, Exception e) {
e.printStackTrace();
Result resul = new Result();
if (e instanceof HttpRequestMethodNotSupportedException) {
resul.setResltInfo(Constant.CODE_TYPE_10, "非法请求", e.getMessage());
} else if (e instanceof HystrixRuntimeException) {
resul.setResltInfo(Constant.CODE_TYPE_30, "feign调用系统异常", e.getCause().getMessage());
} else {
resul.setResltInfo(Constant.CODE_TYPE_1, "系统异常", e.getMessage());
}
return resul;
}
}
三、在其它子项目中:如server-a\server-c出现异常,网关中的ExceptionError这个类会自动捕获到,在server-a\server-c中的pom文件中引入zuul,不然不会生效。
<dependency>
<groupId>com.example</groupId>
<artifactId>zuul</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
四、如果第三步配置还是不生效的话,在server-a\server-c启动类上加上scanBasePackages = “com.example”
@SpringBootApplication(scanBasePackages = "com.example")