Spring Cloud Gateway -- 获取RequestBody(解决RequestBody不完整的问题)
2019-06-24 14:48
2791 查看
Spring Cloud Gateway -- 获取RequestBody(解决RequestBody不完整的问题)
前言
之前在修改RequestBody和Header这篇文章中有个对于获取RequestBody的猜想,现在在使用过程中发现了这个问题(RequestBody不完整的问题)
获取RequestBody
之前是通过这个方法来获取RequestBody,现在发现请求参数一多就会出现参数获取不完整的情况。
private String resolveBodyFromRequest(ServerHttpRequest serverHttpRequest) throws UnsupportedEncodingException { //获取请求体 Flux<DataBuffer> body = serverHttpRequest.getBody(); StringBuilder sb = new StringBuilder(); body.subscribe(buffer -> { byte[] bytes = new byte[buffer.readableByteCount()]; buffer.read(bytes); DataBufferUtils.release(buffer); String bodyString = new String(bytes, StandardCharsets.UTF_8); sb.append(bodyString); }); //System.out.println(sb.toString()); return URLDecoder.decode(sb.toString(),"utf-8"); }
解决办法
修改路由
.route("route1", r -> r.method(HttpMethod.POST) .and().readBody(String.class, requestBody -> { // 这里不对body做判断处理 return true; }).and().path(SERVICE1) .filters(f -> { f.filters(list); return f; }).uri(URI));
修改获取RequestBody方法
exchange.getAttribute("cachedRequestBodyObject")
说明
这种解决方法,不会带来requestbody取不全问题。在低版本的Spring Cloud Finchley.SR2也可以运行。
相关文章推荐
- springcloud项目网关升级:gateway替代zuul以及解决gateway跨域访问问题
- 解决spring-cloud应用无法部署在同一个容器中的问题
- Spring Cloud Edgware新特性之一:解决Eureka中Jersey 1.x版本过旧的问题-不使用Jersey
- SpringCloud(十四):Feign的demo之解决超时问题
- springcloud:com.netflix.discovery.shared.transport.TransportException(问题解决)Ω
- Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
- Spring Cloud Config Server迁移节点或容器化带来的问题 原因,解决
- Spring Cloud出现Options Forbidden 403问题解决方法
- 解决spring设置filter过滤器结合rest风格获取post请求body参数输入流问题
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十二):解决跨域问题
- 学习-SpringCloudZuul gateway转发静态资源问题
- 遇到问题---java获取网络文件大小失败getContentLength()为-1 完整解决方法
- 微服务开发架构——Spring Cloud常见问题与总结<三>Turbine 聚合数据不完整
- 解决SpringBoot获取不到PUT方式提交的参数的问题
- Spring Cloud搭建时碰到的问题及解决办法
- Spring Cloud 自定义ConfigServer 解决敏感信息存储问题
- Spring Cloud项目前后端分离跨域问题解决
- 解决asp.net FileUpload控件无法获取完整路径的问题 - 无序修改浏览器参数
- spring-boot上传文件MultiPartFile获取不到文件问题解决
- SpringCloud Gateway获取post请求体(request body)