有没有办法捕获 500 错误并返回 auth/userservice 响应而不是抛出?
例如。“令牌无效”/“令牌过期” - 用户服务已经提供了正确的响应
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
String authHeader = exchange.getRequest().getHeaders().getFirst("Authorization");
String[] parts = authHeader.split(" ");
return webClientBuilder.build()
.post()
.uri("http://USER-SERVICE/user/validateToken?token=" + parts[1])
.retrieve()
.bodyToMono(UserDto.class)
.map(userDto -> {
exchange.getRequest()
.mutate()
.header("X-auth-user-id", String.valueOf(userDto.getId()));
return exchange;
}).flatMap(chain::filter);
};
}
在成功的身份验证中,它就像一个魅力。但是如果出现任何问题,我想从我的用户服务中获得响应。
我以前没有与 webclient 合作过……它让我发疯。
编辑:我也尝试在测试之前获得响应,但不成功。我使用了一个 Dto,它应该反映来自我的用户服务的错误响应。
var test = webClientBuilder.build()
.post()
.uri("http://USER-SERVICE/user/validateToken?token=" + parts[1])
.retrieve()
.bodyToMono(ApiExceptionDto.class);
var y = test.subscribe(p -> {
System.out.println(p.getMessage());
});
我只是得到一个
reactor.core.Exceptions$ErrorCallbackNotImplemented: org.springframework.web.reactive.function.client.WebClientResponseException$NotFound: 404 Not Found from POST http://192.168.0.69:9001/user/validateToken?token=xx
Caused by: org.springframework.web.reactive.function.client.WebClientResponseException$NotFound: 404 Not Found from POST http://192.168.0.69:9001/user/validateToken?token=xx
at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:202) ~[spring-webflux-5.3.9.jar:5.3.9]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ 404 from POST http://USER-SERVICE/user/validateToken?token=xx [DefaultWebClient]
预期的回应:(邮递员)
POST : http://192.168.0.69:9001/user/validateToken?token=xx
{
"message": "The token was expected to have 3 parts, but got 1.",
"status": "NOT_FOUND",
"time": "Wed, 18 Aug 2021 01:05:21 GMT",
"path": "/user/validateToken"
}