我有一个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

如果要将参数默认为特定值,请在参数中使用@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);

}

将null传递给您不想要的@QueryParam

如果要使@QueryParam可选,则不应用@DefaultValue注释.要使用query参数传递值,只需正常传递值.如果您希望查询参数不显示,只需传递null!

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);

}

所以调用ServiceInterface.getEndpoint(“firstQueryParam”,“secondQueryParam”);要求:

http://targethost.com/service/endpoint?queryA=firstQueryParam&queryB=secondQueryParam

并调用ServiceInterface.getEndpoint(“firstQueryParam”,null);要求:

http://targethost.com/service/endpoint?queryA=firstQueryParam

和瓦拉!没有第二个查询参数!

总结

以上是DEVMAX为你收集整理的java – Jersey客户端/ JAX-RS和可选(不是默认)@QueryParam(客户端)全部内容。

如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

java – Jersey客户端/ JAX-RS和可选(不是默认)@QueryParam(客户端)的更多相关文章

  1. JAX-RS获取打开连接时间

    我正在使用JAX-RS进行HTTP请求。是否有方法获取打开连接所需的时间?打开连接和读取响应似乎对调用函数是隐藏的。

  2. xmlhttprequest – AngularJS和位于不同域中的Jersey Webservice之间的通信.无法访问正确的会话

    亲爱的stackoverflow读者,最近我一直在玩AngularJS和JavaEE6.我已经和泽西建立了一个webservice,并在Glassfish上部署了这个项目.因为我需要某种身份验证和OAuth实现,或者JDBCRealm似乎过度杀戮,所以我决定在用户成功登录后创建一个会话.这似乎工作正常,如果我发布到/从Postman或从部署在glassfish上的基本jQuery网页登录,我将获得

  3. java – 使用RolesAllowedDynamicFeature和Jersey授权

    我正在尝试使用JAX-RS过滤器对用户进行身份验证.这是我正在设置新SecurityContext的过滤器:资源方法如下所示:RolesAllowedDynamicFeature的注册方式如下:我可以在控制台上看到预期的输出.但是,如果我取消注释@RolesAllowed(“user”),我会收到Forbidden错误,并且永远不会调用SecurityContext的isUserInRole方法.

  4. 如何使用基于JAX-RS的Restlet自动将@DefaultValue映射到枚举参数?

    解决方法如果你有一个枚举像:然后,为了让JAX-RS知道要返回的实例,您的查询参数必须是?animal=MEDIUM_DOG.查询参数的值被送到枚举的valueOf静态方法以获取实例.当然,如果你发送像鸟一样的东西它将无法匹配任何东西,它将无法正常工作,因为@QueryParam期望这样:ThetypeToftheannotatedparameter,fieldorpropertymusteither:–Beaprimitivetype–Haveaconstructorthatacceptsasingle

  5. Angular SPA + Jersey + SpringMVC 整合应用

    原文排版地址:AngularSPA+Jersey+SpringMVC整合应用AngularSPA单页面应用和MVC控制器的整合,会有一个疑问,SPA中点击链接的跳转,是经过SPA的路由,还是直接被SpringMVC拦截了?

  6. java – Jersey客户端响应状态204

    我正在使用Jersey服务和客户端.当我试图调用该服务时,我收到此错误:我不懂为什么.这是服务:这是客户:我真的不知道问题可能是什么.我知道另一个问题,看似相同的主题,但他们不是.如果我遗漏了某些内容或者您需要任何额外信息,请告诉我.解决方法204是HTTP响应状态代码,通知客户端没有返回内容.当你的客户端调用get(JSONArray.class)时,它期望有200个数据,因此是例外.从服务器实

  7. java – 在TomEE上使用JAX-RS时的“无资源方法”

    使用库存TomEE,我无法获得简单的JAX-RS资源.我不断得到一个错误:资源类:packagecom.tensorWrench.test;web.xml中:的build.gradle:我尝试了一些排列,添加beans.xml,删除,更改注释的顺序,使用不同的JavaEE类编译依赖项.我一直都会遇到这个错误.解决方法看起来您的资源方法在范围上不公开.试试这个:

  8. java – 如何单元测试传入的Jersey MultiPart请求的处理

    编辑运用会抛出一个我认为,在调用我的MultiPartReader之前,还需要以某种方式转换测试生成的MultiPart.在jersey中必须有一些方法,我可以调用它来执行此转换它的方式,当它在已部署的系统上发出MultiPart请求时,或者可能是接收端在接收HTTP请求时进行一些解析..?

  9. 未设置getAttribute(“javax.servlet.request.X509Certificate”)(Spring,CXF,Jetty,JAX-RSv1.1)

    我已经在客户端尝试了其他一些实现,但没有任何改变.我究竟做错了什么?

  10. java – jersey 2.2:ContainerResponseFilter和ContainerRequestFilter永远不会被执行

    解决方法事实证明,您必须手动注册自定义类–如:完整示例:

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部