【问题标题】:Jersey QueryParam is received as nullJersey QueryParam 被接收为 null
【发布时间】:2017-01-20 22:04:27
【问题描述】:

我正在使用 dropwizard 创建 Jersey Web 服务。客户端使用JsonP 处理跨域ajax 消息。

我得到了一个如下所示的资源方法:

@Path("/addUser")
@GET
@UnitOfWork
public String registerPortalUser(@Context HttpServletRequest req, @QueryParam("callback") String callback, @QueryParam("thedata") MyClass recordData) throws Throwable
{ .. }

我得到了我期望的回调参数,但是我没有收到一个应该注入MyClass 成员的单个 Json 字符串,而是得到了许多参数,它们都是 MyClass 成员名称及其值。意思是,我没有将所有内容作为单个 Json 字符串接收,而是将所有成员分开。

这是什么原因造成的?

【问题讨论】:

  • 将您的 MyClass 对象添加到问题中,因为这很可能是这里的问题。请添加您正在提出的示例请求

标签: java json jersey jsonp


【解决方案1】:

问题出在客户身上。 客户端发送了一个这样的json:

var thedata = 
{ 
   member1 = "value1",
   member2 = "value2"
}

解决它的方法是这样发送:

var thedata=
[ thedata:
  {
    member1 = "value1",
    member2 = "value2"
  }
]

更改后,Jersey 将其识别为请求的参数

【讨论】:

  • 你能发布你的客户端代码,这样我们其他人(看这个)就不会犯同样的错误吗?
【解决方案2】:

您显然是在向服务器发送一个空的 MyClass 对象。您的客户端代码可能看起来像

      MyClass myC = new MyClass();
    //populate MyClass fields
      WebTarget target = client.target(UriBuilder.fromUri("http://localhost:8088/YourWebApp").build()); 


      String res =(String) target.path("addUser").queryParam("thedata", myC).request().accept(MediaType.TEXT_PLAIN).get(String.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多