當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
Springcloud gateway获取post请求内容
生活随笔
收集整理的這篇文章主要介紹了
Springcloud gateway获取post请求内容
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
找了很多教程,可由于各種原因(主要是Spring Boot和Spring Cloud版本不同),獲取一直有問題,參考過的教程:
- https://windmt.com/2019/01/16/spring-cloud-19-spring-cloud-gateway-read-and-modify-request-body/
- https://my.oschina.net/zcqshine/blog/2875060
- https://blog.51cto.com/thinklili/2329184
我的項(xiàng)目使用的版本: - <spring-boot.version>2.1.3.RELEASE</spring-boot.version><spring-cloud.version>Greenwich.SR1</spring-cloud.version>
我最終的Filter如下,其中bodyString 即為請(qǐng)求體中的內(nèi)容
@Component @Slf4j @AllArgsConstructor public class HttpPostBodyFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();String method = request.getMethodValue();String contentType = request.getHeaders().getFirst("Content-Type");if ("POST".equals(method) && contentType.startsWith("multipart/form-data")){return DataBufferUtils.join(exchange.getRequest().getBody()).flatMap(dataBuffer -> {byte[] bytes = new byte[dataBuffer.readableByteCount()];dataBuffer.read(bytes);try {String bodyString = new String(bytes, "utf-8");log.info(bodyString);exchange.getAttributes().put("POST_BODY",bodyString);} catch (UnsupportedEncodingException e) {e.printStackTrace();}DataBufferUtils.release(dataBuffer);Flux<DataBuffer> cachedFlux = Flux.defer(() -> {DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(bytes);return Mono.just(buffer);});ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(exchange.getRequest()) {@Overridepublic Flux<DataBuffer> getBody() {return cachedFlux;}};return chain.filter(exchange.mutate().request(mutatedRequest).build());});}return chain.filter(exchange);}@Overridepublic int getOrder() {return -200;} }總結(jié)
以上是生活随笔為你收集整理的Springcloud gateway获取post请求内容的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Spring Cloud实现微服务前
- 下一篇: k8s体验