【问题标题】:Using query parameters in @Path annotation on client side在客户端的 @Path 注释中使用查询参数
【发布时间】:2021-09-26 23:52:20
【问题描述】:

我正在使用 Quarkus (2.0.2.Final)
这是我的服务器端端点

class Endpoint {
    @Path("{userId}/password")
    @Consumes(MediaType.APPLICATION_JSON)
    @PUT
    @Transactional
    public void changePassword(@QueryParam("action") String act, @PathParam("userId") long userId, AbstractPasswordResourceBean action) {...}
}

@QueryParam“action”可以是“reset”、“reset-request”、“change”中的一种,body内容会根据action不同而变化。

在客户端,我的想法是使用 3 种不同的方法重新映射此端点,一种用于任何操作:

@RegisterRestClient
@Path("/users")
class ClientSide {
    @Path("{userId}/password?action=change")
    @PUT
    TokenResponse changePassword(@PathParam("userId") long userId, ChangePasswordBean request);

    @Path("{userId}/password?action=reset")
    @PUT
    TokenResponse resetPassword(@PathParam("userId") long userId, ResetPasswordBean request);

    @Path("{userId}/password?action=reset-request")
    @PUT
    TokenResponse requestResetPassword(@PathParam("userId") long userId, ResetPasswordRequestBean request);
}

对上述方法之一的每次调用都使用 404 解析,因为调用的 url 解析为 http://service:port/service-name/users/{userId}/password%3Faction=...;该错误似乎是由查询字符串编码引起的。

这是错误还是设计行为?还是我遗漏了什么?

提前感谢您的帮助。

【问题讨论】:

    标签: resteasy quarkus


    【解决方案1】:

    @Path 注释并非旨在接受查询字符串。因此,为什么它被转义为可接受的路径(同意这不是你想要的,但它就是这样工作的)。

    考虑到 JAX-RS 路径匹配的工作原理,我认为您无法做自己想做的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-25
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多