我知道有一种方法可以在Jersey的ContainerRequestFilter类中获取URL。
有没有办法从aroundWriteTo方法中的writerInterceptor获取URL?
@Provider
public class RequestClientWriterInterceptor implements WriterInterceptor {
@Override
public void aroundWriteTo(WriterInterceptorContext context)
throws IOException, WebApplicationException {
context.getOutputStream()
.write(("Message added in the writer interceptor in the client side").getBytes());
context.proceed();
}
}
您只需将UriInfo
注入拦截器即可。您可以从这个对象中获得所需的所有与URI相关的好东西。
@Provider
public class RequestClientWriterInterceptor implements WriterInterceptor {
@Context
private UriInfo uriInfo;
}
您不必担心任何竞争条件或诸如此类的问题,因为将注入线程本地代理,而不是实际对象。
您也可以以新的标头名称发送URL,然后使用getHeaders获取特定的标头:
MultivaluedMap<String,Object> headers = context.getHeaders();
我通过从上下文属性中检索HttpChannel,然后从HttpChannel中获取请求来获得URL。请参阅以下内容。。。。
@Override
public void aroundWriteTo(WriterInterceptorContext context)
throws IOException, WebApplicationException {
HttpChannel httpChannel = (HttpChannel) context.getProperty(HttpChannel.class.getName());
String url = httpChannel.getRequest().getOriginalURI());
context.getOutputStream()
.write(("Message added in the writer interceptor in the client side").getBytes());
context.proceed();
}