当前位置: 首页 > 知识库问答 >
问题:

SpringBoot:修改传入的Web服务响应

齐英耀
2023-03-14

我目前正在开发一个springboot服务,它需要能够修改从自己发出的各种web服务调用接收到的传入响应体。

我搜索了很多地方,可以找到关于servlet过滤器、spring拦截器等的信息,但它们都位于服务和它的调用客户机之间。

但我正在寻找一个组件,它可以坐在这个服务和它调用的其他服务之间。我能找到的最接近的一个是Spring的ClientHttpRequestInterceptor,但它似乎没有修改响应体的能力。

  1. 客户端应用程序--->2。我的春靴服务。---->3。其他web服务

我这里需要一个介于2和3之间的分量。

有人能解释一下吗?谢谢你。

附注:我也知道jaxrs的ClientRequestFilter可以实现这个功能,但是我需要一个基于spring RestTemplate的服务调用的解决方案,而不是基于jaxrs的解决方案。

共有1个答案

扈高逸
2023-03-14

在Spring中,RestTemplate允许我们添加实现ClientHttpRequestInterceptor接口的拦截器。

该接口的intercept(HttpRequest,Byte[],ClientHttpRequestExecution)方法将截取给定的请求并返回响应,

ClientHttpRequestExecution参数来执行实际的执行,并将请求传递给后续的流程链

public class BodyInterceptor
  implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(
      HttpRequest request, 
      byte[] body, 
      ClientHttpRequestExecution execution) throws IOException {

        ClientHttpResponse response = execution.execute(request, body);
        response.getHeaders().add("Iphone_version", "proX");
        return response;
    }
}
 类似资料:
  • 我正在用Laravel5.6构建一个表单,在其中我保存了一个名字和一个用户照片,但我需要将照片与用户名一起存储。我展示了我商店的代码 我可以使用$request->nombre获得用户名; 但我不知道怎么给照片取名字

  • 我有一个要求,其中,作为Web服务[Java]的一部分,我将作业的详细信息输入数据库,数据库由Windows服务[C#]异步处理,并对Javaweb服务通知作业的状态。 情景: 客户端对JavaWeb服务进行同步Restful调用。 JavaWeb Service将作业详细信息输入数据库(类似于进行异步调用),并等待Windows Service的响应(这是对JavaWeb Service的新HT

  • 如何在MULE ESB平台中获取Web服务的POST请求的响应时间?

  • 有人知道netty服务器处理程序取消从web服务器接收数据的最佳方法吗?我有一个服务器处理程序,它将HttpRequests代理到web服务器。但是,当请求客户端取消请求时,我希望在不关闭服务器处理程序和web服务器之间的连接的情况下停止从web服务器接收服务器通道上的数据。 有谁知道我怎么才能做到这一点。你的答复将不胜感激。 非常感谢。

  • 我在上有一个PHP脚本,位于。我有一个位于。 我的问题是,数据真的在Web/DB服务器之间传输吗?例如。这是否在两台服务器上使用GB的带宽?