Jersey QueryParam 被接收为 null

Jersey QueryParam is received as null

我正在使用 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 对象。您的客户端代码可能类似于

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

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

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

解决方法是这样发送:

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

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