在 Jersey 代理客户端的资源接口中解析模板变量

Resolving Template Variable in Resource Interface for Jersey Proxy Client

我在解决接口上的 class 级 @Path 注释时遇到了问题。我正在将此接口传递给 Jersey 代理客户端中的 WebResourceFactory,但它立即因 IllegalStateException 而失败。

接口定义:

@Path("{entity}")
public interface EntityResource {
    @GET
    @Produces("*/xml")
    Entity get(@PathParam("view") EntityType view);
}

我得到的异常:

Exception in thread "main" java.lang.IllegalStateException: The template variable 'entity' has no value
    at org.glassfish.jersey.client.JerseyWebTarget.getUri(JerseyWebTarget.java:135)
    at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:215)
    at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:60)
    at org.glassfish.jersey.client.proxy.WebResourceFactory.invoke(WebResourceFactory.java:322)

关于如何解析 "entity" 模板变量有什么建议吗?

在对 jersey-proxy-client 源代码进行一些调查后,我发现所有模板变量都是通过方法声明上的注释来解析的。 Apache CXF 如何生成我的界面存在问题。我在@PathParam 和@Path 之间不匹配。 @Path 使用 "entity" 而我的 @PathParam 使用 "view"。它们必须相同才能正确解析模板变量。

我遇到了类似的问题,我能够在不匹配 @Path@PathParam 值的情况下解决它。我使用了 @RequestTemplate,它实际上是从 entity 转换为 view:

@APIGatewayIntegration(
      requestTemplates =
          @RequestTemplate(
              mimeType = MediaType.APPLICATION_JSON,
              template = "{\"entity\": \"$input.params('view')\"}"),
      type = "aws",
      contentHandling = "CONVERT_TO_TEXT",
      httpMethod = HTTP_POST_METHOD,
      passthroughBehavior = "WHEN_NO_TEMPLATES"
)

我在 AWS API GW 中使用我的界面。希望这会有用。