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

时间:2019-10-23 03:22:38

标签: java spring-boot web-services filter resttemplate

我目前正在使用springboot服务,它需要具有修改从自身进行的各种Web服务调用接收的传入响应正文的功能。

我在Google上搜索了很多,可以找到有关Servlet过滤器,Spring拦截器等的信息。但是所有这些都位于此服务及其调用客户端之间。

但是我正在寻找一个组件,该组件可以位于此服务与其调用的其他服务之间。我能找到的最接近的是spring的ClientHttpRequestInterceptor,但是它似乎没有能力修改响应主体。

  1. 客户端应用程序---> 2.我的Springboot服务。 ---> 3.其他网络服务

这里我需要一个2到3之间的分量。

有人可以阐明这一点吗?谢谢。

P.S:另外,我知道jaxrs ClientRequestFilter可以解决问题,但是我需要基于Spring RestTemplate的服务调用而不是基于jaxrs的解决方案。

2 个答案:

答案 0 :(得分:3)

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

此接口的拦截(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;
    }
}

答案 1 :(得分:1)

Spring AOP可以为您提供帮助。在调用另一个控制器或组件之前,它可以充当组件。