//全局异常处理类
@Configuration
public class GlobalExceptionConfiguration implements ErrorWebExceptionHandler {
//日志对象
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionConfiguration.class);
private static final ObjectMapper objectMapper = new ObjectMapper();
@Override //参数1: request response ex:出现异常时异常对象
public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
Map<String, String> result = new HashMap<>();
//1.获取响应对象
ServerHttpResponse response = exchange.getResponse();
//2.response是否结束 多个异常处理时候
if (response.isCommitted()) {
return Mono.error(ex);
}
//2.设置响应头类型
response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
//3.设置响应状态吗
if (ex instanceof IllegalTokenException) {
response.setStatusCode(HttpStatus.FORBIDDEN);
} else {
response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
}
//4.设置响应内容
return response
.writeWith(Mono.fromSupplier(() -> {
DataBufferFactory bufferFactory = response.bufferFactory();
result.put("msg", ex.getMessage());
try {
return bufferFactory.wrap(objectMapper.writeValueAsBytes(result));
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}));
}
}