是否可以代理传入的请求?

时间:2013-12-10 12:07:05

标签: java android spring http interceptor

我希望在webservice上为每个请求设置两个拦截器。一个用于传出通信,一个用于响应。

我正在使用正在传出的ClientHttpRequestInterceptor。我的设置如下:

//Rest template
RestTemplate tpl = api.getRestTemplate();
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
interceptors.add( new OutgoingRequestInterceptor() );

tpl.setInterceptors( interceptors );

但是,我希望传入(响应)这样的拦截器。我检查了Spring Framework源代码,但我找不到任何东西。

任何提示?

编辑:

也许我感到困惑或者脑子里有什么不对劲。我今天病了。

我的拦截器类中有以下代码:

@Override
public ClientHttpResponse intercept( HttpRequest request, byte[] bytes, ClientHttpRequestExecution requestExecution ) throws IOException
{
    SLog.d( "intercepted!!"+request.getURI()+". Bytes: "+bytes );
    try
    {
        Thread.sleep( 5000 );
    }
    catch ( InterruptedException e )
    {
        e.printStackTrace();
    }
    ClientHttpResponse response = requestExecution.execute( request, bytes );

    SLog.d( "Response Headers: " + response.getHeaders());


    return response;
}

问题:此代码是否适用于传出,传入或两者兼而有之? 因为日志:request.getUri()正在返回目标网址。

然后,在Response对象上,我获得WebService发送的标题。

所以我确信,响应实际上是服务器响应。但是...... getUri()怎么样?是在实际发送请求之前触发,还是之后?

1 个答案:

答案 0 :(得分:0)

好。经过一些棘手的调试后,我明白了。

即使拦截器类被称为ClientHttpRequestInterceptor,它也会拦截两者。来自客户端的请求,并从服务器中休息。

这个拦截器类就像一个包装器。

enter image description here

因此...

  1. 此方法是整个请求的包装器。从BEFORE请求到请求完成后。
  2. 在将请求发送到webservice
  3. 之前触发此部分代码
  4. 这部分代码实际上是联系WEBSERVICE,因此它会“暂停”,直到它从Web服务获得响应。
  5. 我们返回生成的响应。请注意,如果您使用的方法response.getBody()是一个InputStream,您将使用它,因此之后它将为null。我这样说是因为你不能直接记录它。你要先镜像它。