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

使用不同的@QueryParams重载路径函数

季森
2023-03-14

我想为同一个GET路径提供多个函数。

我也希望我的网络服务“找到”这些函数,当且仅当查询参数与URL字符串中的参数匹配时。

例如:

我有Path(“/myGET”)

对于该路径,我希望有2个功能:

@GET  
@Produces(MediaType.APPLICATION_JSON)
@TypeHint(TagSets.class)
public Response getTagSets(@QueryParam("entityId") Integer entityId)
{
    ...
}

@GET  
@Produces(MediaType.APPLICATION_JSON)
@TypeHint(TagSets.class)
public Response getTagSets(){
    ...
}

现在我得到一个错误:

严重:在资源和/或提供程序类中检测到以下错误和警告:严重:产生媒体类型冲突。资源方法public javax . ws . RS . core . response

所以首先:有什么方法可以实现我在这里想做的事情吗..

第二:如果这是可用的,当且仅当查询参数与函数中请求的内容完全匹配时,是否有任何方法可以找到路径?例如,如果使用相同的路径调用@QueryParam(“不同参数”),则不会到达2个函数中的任何一个。

第三:如果泽西岛无法做到这一点,有没有其他框架可以做到?。

重要提示:回答问题的人认为我在寻找一个变通方法,而不是解决方案。今天,我使用了1个函数,检查参数并从中调用我需要的内容(这是我在发布问题之前使用的内容)。但我想要的是使用框架功能来节省麻烦

谢谢。

共有2个答案

吕向阳
2023-03-14

唯一的方法如注释中所述。您可以使用声明所有查询参数的单个方法,然后根据值(存在与否)调用正确的方法。

(变通方法)如果您只想向客户端公开具有多个查询参数的单个endpoint,而代码实现无关紧要,那么可以使用拦截器。读取查询参数并修改URI以将其指向正确的方法。

韩博简
2023-03-14

资源由其路径(而不是其参数)唯一定义。您定义的两个资源具有相同的路径。您可以为每个路径定义新的路径,例如/myGet/实体/myGet//myGet/不同的参数;或者使用单个路径作为 /myGet/ 并检查查询参数,如下所示:

@GET  
@Produces(MediaType.APPLICATION_JSON)
@TypeHint(TagSets.class)
public Response getTagSets(@Context HttpServletRequest request){

       ...

       if (request.getParameterMap().isEmpty()) {
           // then you have no query params, implement as there are no query params
       } else {
           String queryParam = request.getQueryString();
           // check queryParam, and add another if else statements, implement
       }

       ...

}
 类似资料:
  • 问题内容: 在将我的PHP配置完全搞乱之后,尝试使SOAP模块正常工作(-bash:/ usr / bin / php:没有这样的文件或目录…。)我现在必须使用MAMP,但是每次必须键入路径 如何只键入php而不是MAC上的整个路径? 我仔细检查过,但没有一个名为nor 的文件 谢谢 PS:这是输出echo $ PATH的内容: 问题答案: 每次保存MAMP config(PHP部分)时,它将在文

  • 我已经开始为CDC测试实施PACT。我如何处理我们在不同环境的路径中传递不同参数的场景? 例如,我的测试调用一个函数,该函数通过命中endpoint并传递一些参数来请求服务中的一些数据。非常标准。 E、 G: 对于不同的环境(QA、UAT等),必须传递特定于该环境的唯一数据,以获得有效的200响应。因此,在我的示例中,每个env的carId和userId需要不同。当我最初设置测试时,我使用了我们的

  • 问题内容: 我正在尝试使用单独的路线,但在我的React App中添加/编辑表单的组件相同,如下所示: 现在,在manageClient组件中,我解析查询参数(我在编辑路由中传递带有客户端ID的查询字符串),并根据传递的查询参数有条件地进行渲染。 问题在于这不会再次重新安装整个组件。假设打开了一个编辑页面,并且用户单击添加组件,URL发生了更改,但是该组件没有重新加载,因此保留在编辑页面上。 有办

  • 我有一个组件,它显示了可以使用url查询参数过滤的项目列表,这些项目从api分页,如果设置了过滤器,我需要再次调用第一个页面,这个第一次调用是在路由器的解析器中,所以我需要的是路由器以相同的方式重新加载,就像我来自其他URL一样。 app.routes.ts app.resolver.ts app.component.ts app.service.ts 其他.ts组件

  • 问题内容: 是否可以使用node.js重写URL路径?(我也在使用Express 3.0) 我已经尝试过这样的事情: 但是网址继续不变 问题答案: 当然,只需添加一个中间件功能即可对其进行修改。例如: 此功能从所有传入的请求URL中删除尾部斜杠。请注意,为了使其正常工作,您需要将其放在调用之前。

  • 我是Java新手,正在尝试构建一个FX应用程序。我的一个函数旨在用其他字符串替换某些字符串。只要我定义了目标文件的绝对路径,脚本就可以正常工作,但当我使用相对路径时,脚本就会中断。 问题出在方法“ReadAllBytes”中,该方法只适用于完整路径。但是我需要相对路径,因为文件夹位置会有所不同。 目标文件位于项目文件夹中。是否有其他方法可以用来读取文件内容,而不需要绝对路径? 提前多谢。下面是代码