如何使用自定义网关过滤器访问和修改Spring Cloud Gateway中的请求和响应?我想把一个REST请求转换成SOAP并发出一个调用,在收到SOAP响应后我想把SOAP响应转换成REST响应并使用自定义网关过滤器发回
42fyovps1#
@Component public class MyGlobalFilter implements GlobalFilter{ @Autowired WebClient.Builder builder; @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpResponse response = exchange.getResponse(); return getFromSoap(response).switchIfEmpty(chain.filter(exchange).then(Mono.empty())) .flatMap(dataBuffer -> response.writeWith(Mono.just(dataBuffer))); } private Mono<DataBuffer> getFromSoap(ServerHttpResponse response) { response.setStatusCode(HttpStatus.OK); response.getHeaders().setContentType(MediaType.APPLICATION_JSON); return builder.build().get().uri("http://127.0.0.1:8080/test/list?query=11").retrieve().bodyToMono(RestResp.class).flatMap(result -> { if(result.isFailed()){ return Mono.empty(); } String data = JacksonUtils.toJson(result); return Mono.just(response.bufferFactory().wrap(data.getBytes(StandardCharsets.UTF_8))); }); } }
1条答案
按热度按时间42fyovps1#