【问题标题】:Can jersey clients POST a JAXB object to the server using JSON?jersey 客户端可以使用 JSON 将 JAXB 对象发布到服务器吗?
【发布时间】:2013-09-06 19:54:36
【问题描述】:

我找到了很多关于如何设置 jersey 服务器以便它可以生成和使用 JAXB 绑定对象的示例,但是我很难找到如何让客户端发布相同的 JAXB 绑定对象的示例. This example shows how to do it with XML。我正在寻找一个展示如何使用 JSON 进行操作的工具。

我什至不确定这是否可行。 post 方法上的 javadoc 不明确。

我的帖子是这样的:

    Client client = Client.create();
    WebResource resource = client.resource(uri);
    ClientResponse response = resource.type(MediaType.APPLICATION_JSON)
      .post(ClientResponse.class, instanceWithXmlRootElementAnnotation);

当我尝试此操作时,我的服务器会收到请求,但 @FormParam 的字段始终作为 null 发送过来。这是我的服务器端方法的签名:

@POST
@Path("apath")
@Consumes(MediaType.APPLICATION_JSON)
public String postAPath(@FormParam("InstanceWithXmlRootElementAnnotation")
  InstanceWithXmlRootElementAnnotation instanceWithXmlRootElementAnnotation) {
//instanceWithXmlRootElementAnnotation is always null

我想知道的其他事情是我是否应该使用instanceWithXmlRootElementAnnotation。如果这是一个传统的 web 服务,我会使用 JAXB 来生成一个对象,供客户端使用并通过生成的类发送。但是根据我从链接到的示例中收集到的信息,这个人发送的是源代码,而不是生成的类。

【问题讨论】:

  • InstanceWithXmlRootElementAnnotation 是您的自定义类,因为我找不到它的 jar。我仍在尝试找出使用球衣进行发布请求的方法。
  • @JatinSehgal 是的
  • 所以,在客户端,我需要准备一个与我在自定义类中准备的属性相同的 json

标签: java rest jersey jersey-client jersey-1.0


【解决方案1】:

我自己想出来的。问题是服务器端问题。一旦我删除了服务器上的 @FormParam 注释,一切都按预期工作。结合的问题和答案将为其他人提供基本教程。我的服务器现在看起来像:

@POST
@Path("apath")
@Consumes(MediaType.APPLICATION_JSON)
public String postAPath(InstanceWithXmlRootElementAnnotation instanceWithXmlRootElementAnnotation) {

【讨论】:

    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    相关资源
    最近更新 更多