当前位置: 首页 > 知识库问答 >
问题:

多个Web资源上的全局参数

王杰
2023-03-14

我正在使用jersey、jax-rs构建一个web服务应用程序

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

我有多个带有独立路径的方法,比如“/user”“/test”

@Path ("/authenticate")
public class Authenticate{
private static final Log log = LogFactory.getLog(Authenticate.class);

@QueryParam("entityId")
String entity;

@GET
@Path ("/{param}")
public Response getMsg(@PathParam ("param") String msg) {
    String o = "Hello Welcome Back:"+msg;
    return Response.status(200).entity(o).build();
}

@GET
@Path ("/user")
@Produces({"application/json"})
public UserDTO getUser (@Context HttpServletRequest request,
        @QueryParam("userId") int userId) {
    System.out.println("In Get User, User:"+userId);    
    System.out.println("In Get User, Entity:"+entity);
}

@GET
@Path ("/test")
@Produces({"application/json"})
public TestPOJO getTestPOJO () {
    System.out.println("In Get TestPOJO");
    System.out.println("In Get Test, Entity:"+entity);
    return new TestPOJO();
}

}

正如对jersey客户端的建议,我使用来自客户端的单个web资源,并使用.path(“/xxx”)从同一web资源构建后续的web资源。

以下是我创建初始 Web 资源的方式

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

以下是我随后如何使用网络资源

MultivaluedMap<String, String> params = new MultivaluedMapImpl();           
ClientResponse userRes = webResource.path("/user").queryParams(params).accept("application/json").get(ClientResponse.class);

我想为初始 Web 资源分配一个查询参数,并且我希望使用 .path() 创建的所有后续 Web 资源都保留该参数。但这种情况现在还没有发生。例如,在上面的代码中,当使用 path(“/user”) 进行调用时,“entityId”不可用。

我的想法是分配一次公共参数,webResource的所有后续用户都不需要反复添加这些参数。有办法吗?这种方法有效吗?

共有2个答案

国盛
2023-03-14

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

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

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

问题是,对于我通过弄乱 Jersey 学到的东西,每当您进行调用时,资源类(在您的例子中为 Authenticate)都会再次实例化。因此,您不能只将信息保存在全局参数中,因为后续调用会将字符串实体 ID 设置为 null。

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

我希望我至少能对你的问题有所了解。

冀翰翮
2023-03-14

下一行创建一个新的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总是创建一个新的Web资源对象

 类似资料:
  • 主要内容:1. struts.properties,2. struts.xml,3. listener通常情况下,您可能需要一个全局资源包(属性文件)来存储信息,可用于在应用程序中的所有类。 在Struts2,有三种方式来配置全局资源包: 1. struts.properties 配置全局资源包在 “struts.properties” 文件,在这里你定义一个名为“global.properties”的属性文件为全局资源包。 对于多个资源包,只是用逗号分隔属性文件。 2. struts.xml

  • 问题内容: 在我的Web服务器应用程序中,我有一个方法,该方法可以修改xml文档并看起来类似于: 使用的zip归档文件包含需要修改的xml文件和其他一些文件。如何区分使用的xml文件和方法内部的归档以及应该使用哪种方法参数来表示此使用的资源? 问题答案: 一种解决方案是只读取。您可以将包裹在中。有了,您可以得到with ,然后可以得到与文件名。然后只要检查名称即可。 不过,您需要消耗。这是一个简单

  • 主要内容:JSF Web资源示例:访问图片文件,JSF Web资源示例:访问CSS文件,JSF Web资源示例:访问JavaScript文件JSF Web资源是在Web应用程序中正确呈现所需的资源。它包括图像,脚本(JS)文件和任何用户创建的组件库。 JSF提供了一种存储Web资源的标准方式。 您可以使用以下任何一种来存储资源。 它必须存储在Web应用程序根目录资源目录的子目录中:,如:,等等。 打包在Web应用程序的类路径中的资源必须位于Web应用程序中的目录的子目录中:。 您可以使用此文件结

  • 我有一个基于滴闪(v 0.7.1)的泽西岛REST服务。目前,我使用一个应用程序连接器端口 (8810),并且我有两个资源(例如“/path1”、“/path2”)。 我将能够分别作为超文本传输协议:\\localhost:8810\path 1和超文本传输协议:\\localhost:8810\path 2访问这些资源。我试图实现的是为每个资源都有一个单独的端口。(例如超文本传输协议:\\loc

  • 我正在学习spring cloud dataflow的概念,并想知道存储全局资源的常见方式是什么。 例如,当我有一个带有PMML处理器的流时,我希望通过Spring-Cloud-Task周期性地重新训练底层的PMML模型。 我将在哪里存储模型,以便它可以被处理器用作(只读)资源,并由任务每晚更新?Spring云数据流中是否有一个全局存储的概念?我应该使用spring-cloud之外的传统数据库,还

  • 问题内容: 当我尝试提交拓扑时,我发现了这个 但是这个错误在pom.xml中更新后出现了 那是因为我是一个错误 这是pom文件 pom文件的第2部分 pom文件的第3部分 问题答案: 在内部或通过远程运行拓扑(这是项目中的默认设置)存在根本区别。 的范围设置为默认值,因为这些类文件仍然在群​​集中可用。告诉Maven,这些类一定不能包含在汇编文件中,从而减小了jar的大小。此外,如果文件被多次提供