解决Jersey代理客户端资源接口中的模板变量问题

时间:2017-11-15 17:56:34

标签: java jersey-2.0 jersey-client

我有一个问题在接口上解析类级别的@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)

有关如何解决"实体的任何建议"模板变量?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我遇到了类似的问题,我无需匹配 @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 中使用我的接口。希望这会有所帮助。