大家好,我只想知道在jax-rs Web服务中使用ClientRequestFilter时如何将ClientRequestContext对象的属性设置为动态值。就是这样
假设我有一个对象
MyObject obj=new MyObject();
obj.nmae="simon";
obj.vendor=209;
现在我想调用一个为其创建球衣客户端并为其创建过滤器的Web服务。现在我想知道如何将对象传递给clientFilter,以便可以将ClientRequestContext属性设置为myObject ?
@Provider
public class RequestClientFilter implements ClientRequestFilter {
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
// how to set this to a variable value passed from a function in my code
requestContext.setProperty("test", "test client request filter");
//something along these lines
requestContext.setProperty("myobj",obj);
}
}
这就是正在发生的事情
MyObject obj=new MyObject();
obj.nmae="simon";
obj.vendor=209;
ClientConfig config = new ClientConfig();
config.register(EntityLoggingFilter.class);
config.register(GsonMessageBodyHandler.class);
config.register(ClFilter.class);
// config.property(ClientProperties.CONNECT_TIMEOUT, 1000);
config.property(ClientProperties.READ_TIMEOUT, 10000);
try {
Client client = ClientBuilder.newClient(config);
WebTarget webTarget = client.target("http://localhost:8081/ServicB").path("Register")
.path("Service");
System.out.println(webTarget.getUri());
Invocation.Builder invocationBuilder = webTarget.request().accept(MediaType.APPLICATION_JSON);
Response response = invocationBuilder.post(Entity.json("anything"));
System.out.println(response.getStatus());
String bresponse = response.readEntity(String.class);
if (bresponse == null) {
System.out.println("null response");
}
System.out.println(bresponse);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
答案 0 :(得分:1)
您可以将过滤器注册为类或实例。如果MyObject
只是一次性对象,则只需将对象通过过滤器的构造函数,然后注册它即可。
config.register(new RequestClientFilter(myObject));
如果MyObject
将针对每个请求进行更改,那么您也可以改为使用WebTarget
注册过滤器。因此,对于每个不同的请求,您可以使用不同的对象。
Response response1 = client.target(uri)
.register(new RequestClientFilter(myObjectOne))
.request()
.get();
Response response2 = client.target(uri)
.register(new RequestClientFilter(myObjectTwo))
.request()
.get();