springcloud gateway 解决请求接口的响应报文内容不全或者错误的方案

在Springcloud Gateway中遇到POST请求时响应JSON内容不全或错误的问题,通过设置`Content-Type`为`application/json; charset=UTF-8`解决了内容格式问题。然而,对于过长的响应报文,仍会出现内容丢失的情况。为了解决这个问题,需要修改原始响应报文的长度。此外,当需要修改请求参数或请求体时,还需适当地设置`content-length`以确保下层微服务能正确解析请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Springcloud默认的返回内容格式为HTML,但我们微服务系统之间的调用格式通常为json格式,对于post请求,有时后响应的报文为JSON的时候就报错,接口测试的时候通常返回如下错误:<Not JSON content>

但通过查看html报文时 确实有响应内容,只是内容不全,json体只显示了一部分,存在丢失问题。解决此问题的方式就是修改原始响应内容的参数设置。重新设置headers Content-Type如下:

        ServerHttpResponse originalResponse = exchange.getResponse();
        HttpHeaders httpHeaders = originalResponse.getHeaders();
        httpHeaders.add("Content-Type", "application/json; charset=UTF-8");

对于返回的内容显示不全的报错问题可以解决。

但同时另一个问题出现了,当测试加长的响应报文的时候,对于json报文还是显示错误,也就是默认的响应报文有长度限制,超过默认长度的报文后半部分会丢失,也就是原本的json串无法完整的显示,可以通过查看html来确认。 所以还需要修改原始的响应报文长度。如下:

originalResponse.getHeaders().setContentLength(uppedContent.length);

然后再通过 bufferFactory.wrap()方法返回内容。

 

另外post请求时,业务需要我们修改请求参数或者请求体参数,那就需要我们重新设置content-length的值,否则下层微服务获取参数时,会缺失一部分报错。参考如下:

           //封装新的request
   &n

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值