@Path("foo/{instance}")
public interface Foo
{
@Context private UriInfo uriInfo;
@POST
@Path("doit")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Thing1 doit(Thing2 arg);
}
但当然不能这样做,它是一个接口,而不是一个类。但是接口是使用代理模式所需要的。我使用代理模式创建客户机:
ClientBuilder builder = ClientBuilder.newBuilder().register(JacksonJsonProvider.class);
MyRequestFilter filter = new MyRequestFilter();
builder = builder.register(filter);
WebTarget target = builder.build().target(url);
Foo serviceClient = WebResourceFactory.newResource(Foo.class, target);
但是,调用ServiceClient.doit(...)
会导致IllegalStateException:模板变量'instance‘没有值
。我尝试使用ClientRequestFilter来注入实例变量,但在引发此异常之前甚至没有调用filter方法。是否有任何方法可以从客户机注入一个路径参数,而不将其作为@pathparam
参数添加到每个方法中?原因是,我已经定义了一个接口,我希望我的代理客户端实现这个接口,添加一个参数会改变签名。
在JAX-WS客户机的foo
接口中,为缺少的模板值添加@pathparam
:
@Path("foo/{instance}")
public interface Foo
{
@POST
@Path("doit")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Thing1 doit(@PathParam("instance") String instance, Thing2 arg);
}
显然,您还需要更改客户机调用doit()
的方式,以适应这一点。
Thing1 thing1 = serviceClient.doit("anything", arg);
您的服务器资源(客户端接口所基于的)不需要更改。
我需要将带有多个可选参数的路径映射到我的endpoint
我试图在was 8.5上部署使用jersey的jax-rs客户机应用程序。 我希望我不需要在war中打包jersey JAR,因为was将提供它们。 但在试图调用servlet时,我遇到了这个错误: 我可以做些什么来使用was库,这样我就不需要把它们打包在我的应用程序中了吗?
运行一个客户端最少需要Jersey框架的哪些JAR文件?如果我包括所有的JAR,它将占用4 MB。
我正在使用泽西JAX-RS客户端(版本2.0)。我知道它使用Jackson ObjectMapper来生成和解析JSON。我想使用相同的对象为一些java类生成JSON,这样我就可以将它们写入日志。 我知道我可以创建一个新的ObjectMapper实例,但我更喜欢请求泽西客户端给我一个它正在使用的引用。我该怎么做呢?泽西2.0知道Jackson,因为它包含一个JacksonFeature类,该类首
我有一个方法 我可能更容易获得查询参数的映射。
我试图使用JAX-RS从REST服务下载一个文件。这是我的代码,它通过发送GET请求调用下载: 然而,我面临着将响应转换为实际文件对象的问题。所以我所做的是以下几点: 创建的文件无效,我调试了代码并注意到输出包含一个类似的字符串(大得多): Superstore.TWB YSI 7 D M 3 F 编辑:引用关于HTTP响应的REST API引用: 反应体 以下内容之一,具体取决于工作簿的格式: