Spring Cloud Alibaba微服务实战二十四 - SpringCloud Gateway的全局异常处理
package com.example.demo.handler;
import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
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.ResponseStatusException;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Configuration
public class GlobalExceptionHandler {
@Order(-1)
@Bean
public ErrorWebExceptionHandler errorWebExceptionHandler() {
return (exchange, ex) -> {
// 设置响应状态码
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
// 设置响应头
response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
// 设置响应内容
DataBufferFactory bufferFactory = response.bufferFactory();
// 自定义错误信息
String errorBody = "{\"code\": 500, \"message\": \"服务器内部错误\"}";
// 返回错误信息
return response.writeWith(Mono.just(bufferFactory.wrap(errorBody.getBytes())));
};
}
}
这个代码实例展示了如何在Spring Cloud Gateway中实现一个全局异常处理器。通过定义一个ErrorWebExceptionHandler的Bean,并设置响应的状态码、头部和内容,我们可以在服务出现异常时提供一个统一的错误响应。这有助于提高前端的用户体验,并简化后端的错误处理流程。
评论已关闭