在客户端的@Path 注解中使用查询参数
Using query parameters in @Path annotation on client side
我正在使用 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”之一,正文内容会根据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=...
;该错误似乎是由查询字符串编码引起的。
这是错误还是设计行为?或者我遗漏了什么?
在此先感谢您的帮助。
@Path
注释不是为接受查询字符串而设计的。因此,为什么它被转义成为可接受的路径(同意这不是您想要的,但这就是它的工作原理)。
考虑到 JAX-RS 路径匹配的工作原理,我认为您无法做您想做的事。
我正在使用 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”之一,正文内容会根据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=...
;该错误似乎是由查询字符串编码引起的。
这是错误还是设计行为?或者我遗漏了什么?
在此先感谢您的帮助。
@Path
注释不是为接受查询字符串而设计的。因此,为什么它被转义成为可接受的路径(同意这不是您想要的,但这就是它的工作原理)。
考虑到 JAX-RS 路径匹配的工作原理,我认为您无法做您想做的事。