我有一个RESTful API,它的文档说某个查询参数是可选的,并且不提供默认参数。因此,我可以提供该值,也可以不将其作为参数发送到GET请求中。
示例:
querya
queryb
是可选的(可以在没有它的情况下发送get
)http://www.example.com/service/endpoint?queryA=foo&queryB=bar
http://www.example.com/service/endpoint?queryA=foo
我如何为Jersey-Proxy创建一个可以做到这一点的客户端接口??我没有与服务器端代码进行接口,所以我通过jersey-proxy使用org.glassfish.jersey.client.proxy.WebResourceFactory
生成与服务器API交互的客户端。
示例界面:
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/service")
@Produces("application/json")
public interface ServiceInterface {
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first,
@QueryParam("queryB") String second);
}
我知道我可以做另一个方法:
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first);
我不敢相信竟然这么容易:
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/service")
@Produces("application/json")
public interface ServiceInterface {
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first,
@QueryParam("queryB") String second);
}
注意到问题界面有什么不同吗??没有。那是因为那就是答案!
如果希望将参数默认为特定值,可以在参数中使用@defaultvalue
注释:
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/service")
@Produces("application/json")
public interface ServiceInterface {
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first,
@QueryParam("queryB") @DefaultValue("default") String second);
}
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/service")
@Produces("application/json")
public interface ServiceInterface {
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first,
// Pass null to this parameter to not put it in the GET request
@QueryParam("queryB") String second);
}
http://targethost.com/service/endpoint?queryA=firstQueryParam&queryB=secondQueryParam
并调用ServiceInterface.GetEndpoint(“FirstQueryParam”,null);
调用:
http://targethost.com/service/endpoint?queryA=firstQueryParam
还有瓦拉!没有第二个查询参数!:)
如果API接受原语值(如int
、float
、boolean
等),则对该原语使用对象包装类(自动装箱)(如integer
、float
、boolean
等)。然后,可以将null
传递给该方法:
public Response getEndpoint(@QueryParam("queryA") Boolean first);
我试图在was 8.5上部署使用jersey的jax-rs客户机应用程序。 我希望我不需要在war中打包jersey JAR,因为was将提供它们。 但在试图调用servlet时,我遇到了这个错误: 我可以做些什么来使用was库,这样我就不需要把它们打包在我的应用程序中了吗?
运行一个客户端最少需要Jersey框架的哪些JAR文件?如果我包括所有的JAR,它将占用4 MB。
我在使用Jersey客户端(1.11)和JSONConfiguration时遇到了一些问题。要素映射设置为true。我的测试代码如下所示: 在服务器上: 1) 我的网络。xml的POJO映射设置为true。 2) MyFooDTO只是一个如下所示的POJO: 3) MyFooCollectionWrapper如下所示: 我已经验证了服务器在创建Json响应时没有问题。如果将响应类型设置为Strin
我正在使用泽西JAX-RS客户端(版本2.0)。我知道它使用Jackson ObjectMapper来生成和解析JSON。我想使用相同的对象为一些java类生成JSON,这样我就可以将它们写入日志。 我知道我可以创建一个新的ObjectMapper实例,但我更喜欢请求泽西客户端给我一个它正在使用的引用。我该怎么做呢?泽西2.0知道Jackson,因为它包含一个JacksonFeature类,该类首
我正在尝试创建RESTful web服务,但无法使删除生效,我不确定问题在哪里。我认为问题在客户端项目中,但也可能在服务器项目的资源类中。 我有一个使用这种方法的学生道课,我不认为这是一个问题,因为它适用于其他项目。 我有一个StudentResource类,它是我从包含这段代码的模式中创建的RESTful资源 然后,我创建了一个java项目,并使用此方法创建了名为OneStudent的RESTf
我通过一个spring上下文注入了一个JAX RS客户端,如下所示: 在成功响应(200、202、204)的情况下,如何访问响应状态?
我尝试将代理添加到Apache CXF3客户端API中。
如何用Apache CXF实现这一点?