MongoDB,编组,JAXB和JSON

时间:2013-03-31 10:51:03

标签: java mongodb jaxb jersey marshalling

所以我真的很困惑,所以希望我所要求的是有道理的。我应该注意这是作业,但我只是在一小部分寻求帮助。

以下是我的数据类的简化版和通用版:

@XmlRootElement(name="item")
@XmlType(propOrder={"name", "value"})
public class Item {

    private String name;
    private int value;

    @XmlElement(name="name")    
    public String getName() {
        return name;
    }

    @XmlElement(name="value")   
    public int getValue() {
        return value;
    }

}

@XmlRootElement(name="itemcontainer")
@XmlType(propOrder={ "name", "items"})
public class ItemContainer {

    private String name;
    private ArrayList<Item> items;

    @XmlElement(name="name")
    public String getName() {
        return name;
    }

    @XmlElement(name="items")
    public ArrayList<Item> getItem() {
        return item;
    }
}

我需要做的是在JSON之间来回转换ItemContainer对象以存储在MongoDB数据库中。 (必须是MongoDB)

据我所知,ArrayLists无法编组。

我最终需要做的是从MongoDB数据库中读取,将JSON解组为Java对象,对这些对象执行操作,然后将它们编组回JSON以存储在数据库中。

我需要更改或做什么才能让我在JSON和ItemContainer之间进行转换?

1 个答案:

答案 0 :(得分:1)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

以下是如何使用MOXy的JSON绑定支持您的用例。

<强>富

以下是我们将用于此示例的Java模型。

public class Foo {

    private String bar;

    public String getBar() {
        return bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

}

<强> jaxb.properties

要将MOXy指定为JAXB提供程序,您需要包含一个名为jaxb.properties的文件,该文件在与您的域模型相同的包中包含以下内容(请参阅:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

<强>演示

import java.util.*;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;

import org.eclipse.persistence.jaxb.JAXBContextProperties;

public class Demo {

    public static void main(String[] args) throws Exception {
        Map<String, Object> properties = new HashMap<String, Object>(2);
        properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
        properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);
        JAXBContext jc = JAXBContext.newInstance(new Class[] {Foo.class}, properties);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        StreamSource json = new StreamSource("src/forum15728638/input.json");
        List<Foo> foos = (List<Foo>) unmarshaller.unmarshal(json, Foo.class).getValue();

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(foos, System.out);
    }

}

<强> input.json /输出

[ {
   "bar" : "Hello"
}, {
   "bar" : "World"
} ]

了解更多信息