Spring Cloud - 通过 Gateway webflux 编程实现网关异常处理
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
public class CustomGlobalExceptionHandlerFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
return chain.filter(exchange).onErrorResume(throwable -> {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
// 自定义错误信息处理,这里只是示例,可以根据实际情况构建错误信息
String errorMessage = "{\"message\": \"系统异常,请联系管理员\"}";
DataBufferFactory bufferFactory = response.bufferFactory();
response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
return response.writeWith(Mono.just(bufferFactory.wrap(errorMessage.getBytes())));
});
}
}
这段代码定义了一个全局过滤器,用于处理网关中的异常。当上游服务因为某种原因抛出异常时,会进入onErrorResume
方法中,并设置响应状态码为500,内容类型为JSON,并返回一个自定义的错误信息。这样,当网关中发生异常时,可以返回一个友好的错误提示给客户端,而不是返回一个全无信息的服务器错误。
评论已关闭