1、我在项目网关中发现注解无效,我调试了很久都不行,后来我看到每个单体应用中都有一个处理异常类,这就是导致无效的原因
2、我将每个单体应用的异常处理类提取到一个公共基础模块,后来发现注解也是无效。排查之后发现这个异常处理类没有被spring boot 扫描到。
3、提取公共异常处理类到基础模块
@Slf4j
@RestControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler({ IllegalArgumentException.class })
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map<String, Object> badRequestException(IllegalArgumentException exception) {
Map<String, Object> data = new HashMap<>();
data.put("code", HttpStatus.BAD_REQUEST.value());
data.put("message", exception.getMessage());
return data;
}
@ExceptionHandler({SQLException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Map<String,Object> catchSqlException(SQLException sqlException){
log.error("操作数据库异常", sqlException.getMessage());
Map<String, Object> data = new HashMap<>();
data.put("code", HttpStatus.INTERNAL_SERVER_ERROR.value());
data.put("message", "网络异常,请刷新后重试");
return data;
}
}
4、修改入口类的注解
@SpringBootApplication(scanBasePackages="{异常处理类的包名,自己本模块的包名}")
然后需要处理异常的模块在pom中引入该模块即可