为 Jersey 代理客户端解析资源接口中的模板变量
Posted
技术标签:
【中文标题】为 Jersey 代理客户端解析资源接口中的模板变量【英文标题】:Resolving Template Variable in Resource Interface for Jersey Proxy Client 【发布时间】:2018-04-29 01:58:08 【问题描述】:我在解决接口上的类级@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)
关于如何解析“实体”模板变量的任何建议?
【问题讨论】:
【参考方案1】:在对 jersey-proxy-client 源代码做了一些调查之后,我发现所有的模板变量都是通过方法声明上的注释来解析的。 Apache CXF 如何生成我的接口存在问题。我的@PathParam 和@Path 不匹配。 @Path 使用“实体”,我的 @PathParam 使用“视图”。它们都需要相同才能正确解析模板变量。
【讨论】:
【参考方案2】:我遇到了类似的问题,我能够在不匹配 @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 中使用我的接口。希望这会有用。
【讨论】:
以上是关于为 Jersey 代理客户端解析资源接口中的模板变量的主要内容,如果未能解决你的问题,请参考以下文章
在WebLogic 12c / Jersey上禁用JAX-RS资源的自动注册