【问题标题】:How does JAXB to JSON (and vice versa) work using Jersey?JAXB 到 JSON(反之亦然)如何使用 Jersey 工作?
【发布时间】:2011-03-10 01:21:35
【问题描述】:

我已经成功实现了一项适用于我自己的客户的宁静服务。现在,我希望使它成为其他客户也可以与之交互的服务。这样,我得出以下问题:(我的代码的快照出现在我的问题之后,系统与我的代码配合得很好)

1- 服务器和客户端之间传输的数据是什么样的?考虑到我没有使用任何其他 JAXB 注释(例如 @XMLElement)。有没有办法可以看到生成的 JSON?

2- JAXB 应该是“Java Architecture for XML Binding”,那么,它是以 XML 还是 JSON 格式发送数据(考虑到我已将请求类型指定为 json)?或者,它是否在客户端将对象转换为 XML,然后再转换为 JSON,在服务器中,它是否获取 JSON 并将其转换为 XML,然后再转换为 Java 对象?

3- 我在我的客户端中使用 JAXB,但我的服务器应该得到一个 json 请求。这是否意味着任何其他客户端如果它生成带有“键”和“值”对的 json 可以与我的服务器交互?或者,它是否强制每个客户端使用 JAXB(考虑到我在服务器中的方法具有特定对象 JAXBBean 的输入参数)?不幸的是,我目前不知道如何在不使用 JAXB 的情况下在 Java 中创建和发送 json!所以,在问之前我无法测试这个问题。我以后会学习它。

我的部分代码:

我使用 Jersey 来实现我的宁静服务。在客户端,我将带有 JAXB 对象列表的 post 消息发送到服务器。每个 JAXB 对象都是一个 bean 的实例,注释如下:

@XmlRootElement
public class JAXBBean {

String key;
String val;

//setters and getters (with no annotation) come here
...
}

然后我通过以下方式将列表发送到服务器:

String response = (String) publishWR.type("application/json").post(String.class, new GenericEntity<List<JAXBBean>> (reqArr){});
// publishWR is of type: com.sun.jersey.api.client.WebResource
// reArr is of type: List<JAXBBean>

在服务器端,我有一个方法可以回答这个网络资源上的发布请求,它是这样写的:

@POST 
@Consumes("application/json")    
public String postAnnotation(List<JAXBBean> requestArr){
    String anno = "";
    String user = "";
    ...

    for(int i = 0 ; i < requestArr.size() ; i++ ){
            if( requestArr.get(i).getKey().equals("annotation") )
                anno = requestArr.get(i).getVal();
            else if( requestArr.get(i).getKey().equals("username") )
                user = requestArr.get(i).getVal();
            ...
    }
    ...
}

谢谢!

【问题讨论】:

  • 无法帮助您处理泽西岛。如果你想知道 CXF 如何与 Jackson 和 JAXB 一起做这件事,我可以告诉你。

标签: json rest jaxb jersey


【解决方案1】:

1- 您可以使用浏览器下载 JSON 响应,然后使用简单的文本编辑器 (validate and format JSON) 进行查看。
2- 不,Jersey JSON 提供程序使用 Jackson 直接在 JSON 中序列化/反序列化对象并返回到 Java 对象。
3- 是的,每个客户端都能够读取您的 JSON 响应。

【讨论】:

    【解决方案2】:

    Jersey 为此利用了 Jettison 库。 Jettison 将 JSON 与由 JAXB 实现处理的 StAX 相互转换:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 2016-04-30
      • 2012-04-02
      • 2012-03-24
      相关资源
      最近更新 更多