Jersey 多个webresources上的全局参数

Jersey 多个webresources上的全局参数,jersey,jax-rs,Jersey,Jax Rs,我正在使用jersey、jax和rs构建一个webservices应用程序 我在路径“/authenticate”处有一个jax rs资源文件 我有多个具有单独路径的方法,如“/user”“/test” } 正如对jersey客户端所建议的那样,我从客户端使用单个webresource,并使用.path(“/xxx”)从同一webresource构建后续webresources 下面是我如何创建初始web资源的 WebResource webResource = client.resource(

我正在使用jersey、jax和rs构建一个webservices应用程序

我在路径“/authenticate”处有一个jax rs资源文件

我有多个具有单独路径的方法,如“/user”“/test”

}

正如对jersey客户端所建议的那样,我从客户端使用单个webresource,并使用.path(“/xxx”)从同一webresource构建后续webresources

下面是我如何创建初始web资源的

WebResource webResource = client.resource("http://localhost:8080/Service/jaxrs/authenticate");
webResource.queryParam("entityId", securityHelper.getEntityId().toString());
下面是我随后如何使用webresource

MultivaluedMap<String, String> params = new MultivaluedMapImpl();           
ClientResponse userRes = webResource.path("/user").queryParams(params).accept("application/json").get(ClientResponse.class);
MultivaluedMap params=新的MultivaluedMapImpl();
ClientResponse userRes=webResource.path(“/user”).queryParams(params.accept(“application/json”).get(ClientResponse.class);
我想为初始webresource分配一个queryparam,并希望使用.path()创建的所有后续webresource都保留该queryparam。但现在这并没有发生。例如,在上面的代码中,当使用路径(“/user”)进行调用时,“entityId”不可用


我的想法是一次性分配公共参数,webResource的所有后续用户无需反复添加这些参数。有办法吗?这种方法行得通吗?

我可能不是回答这个问题的最佳人选,因为我不久前就进入了泽西岛和RESTful服务器的“世界”,但由于我看到这一问题两天都没有得到回答,我会尽我所能提供帮助

如果我理解正确,您正试图通过使用查询将用户信息保存在entityId字符串上,以便在您进行后续调用时可以使用

好的,让我们从你所拥有的开始。使用您的代码(entityId作为全局参数),您要指定的是,当您从Authenticate类调用资源时,可以使用类型为“?entityId=“something”的查询进行任何调用,此类中的任何方法都可以使用查询中发送的信息

问题是,根据我在Jersey上的经验,无论何时进行调用,资源类(在您的案例中是Authenticate)都会再次实例化。因此,您不能只将信息保存在全局参数中,因为后续调用的字符串entityId将为null

这意味着,如果要保存信息,必须在外部资源(例如:db、文件等)中保存。您选择什么方法取决于您想做什么以及您在应用程序中寻找什么


我希望我至少能对你的问题透露一点信息。

我可能不是回答这个问题的最佳人选,因为不久前我进入了泽西岛和RESTful服务器的“世界”,但由于我看到这两天都没有得到回答,我会尽力帮助你

如果我理解正确,您正试图通过使用查询将用户信息保存在entityId字符串上,以便在您进行后续调用时可以使用

好的,让我们从你所拥有的开始。使用您的代码(entityId作为全局参数),您要指定的是,当您从Authenticate类调用资源时,可以使用类型为“?entityId=“something”的查询进行任何调用,此类中的任何方法都可以使用查询中发送的信息

问题是,根据我在Jersey上的经验,无论何时进行调用,资源类(在您的案例中是Authenticate)都会再次实例化。因此,您不能只将信息保存在全局参数中,因为后续调用的字符串entityId将为null

这意味着,如果要保存信息,必须在外部资源(例如:db、文件等)中保存。您选择什么方法取决于您想做什么以及您在应用程序中寻找什么


我希望我至少能够为您的问题提供一点线索。

下面的一行创建了一个新的WebResource,并且没有更改WebResource对象的状态:

webResource.queryParam("entityId", securityHelper.getEntityId().toString())
最终,您可以像这样更改代码以创建“基本”资源:

WebResource webResource = client.resource("http://localhost:8080/Service/jaxrs/authenticate").queryParam("entityId", securityHelper.getEntityId().toString());

然后使用此资源创建另一个您喜欢的资源。WebResource.queryParam和WebResource.queryParams始终创建一个新的WebResource对象。

下一行创建一个新的WebResource,但不更改WebResource对象的状态:

webResource.queryParam("entityId", securityHelper.getEntityId().toString())
最终,您可以像这样更改代码以创建“基本”资源:

WebResource webResource = client.resource("http://localhost:8080/Service/jaxrs/authenticate").queryParam("entityId", securityHelper.getEntityId().toString());

然后使用此资源创建另一个您喜欢的资源。WebResource.queryParam和WebResource.queryParams始终会创建一个新的WebResource对象。

感谢您的回复。我离开了几天,只是看到了这个。因此,如果我理解它,如果我在创建webResource时使用queryParam,它将继续使用它。请注意,queryParam会创建一个新的webresource,因此您应该使用该资源,而不是调用queryParam的资源。谢谢您的回复。我离开了几天,只是看到了这个。因此,如果我理解它,如果我在创建webResource时使用queryParam,它将继续使用它。请注意,queryParam会创建一个新的webresource,因此您应该使用该资源,而不是调用queryParam的资源。谢谢您的回复。你的理解在任何程度上都是正确的。我正在尝试访问需要请求者标识的web资源。因此,我没有尝试在使用webresource的代码中的任何地方添加该参数,而是尝试将其设置一次,以便将该参数添加到所有webresource请求中。感谢您的回复。你的理解在任何程度上都是正确的。我正在尝试访问需要请求者标识的web资源。因此,我没有尝试在使用webresource的代码中的任何地方添加该参数,而是尝试将其设置一次,以便将该参数添加到所有webresource请求中。