在我的Jersey项目中,我使用MOXy来编组/来自JSON。我想编组的一个类是一个可能为空的字符串数组。
class Data
{
@XmlElement(nillable = true) public String[] array;
}
在数组为空的情况下,我希望输出为:
{
"array" : []
}
然而,看起来MOXy正在从输出中过滤掉空数组。如何让它在输出中包含空数组?
我正在考虑将JSONConfiguration.mapped()。array(“array”)。build()添加到MOXy提供程序构造函数中,但这似乎没有什么区别(我甚至不确定它是什么正确的解决方案)。
答案 0 :(得分:2)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB 2 (JSR-222)专家组的成员。
原始回答
已输入以下增强请求。您可以使用以下链接跟踪我们在此问题上的进展。
更新
从2012年5月19日EclipseLink 2.4.0标签开始,您可以设置以下属性以获取您正在寻找的行为。
marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, true);
您可以从以下位置下载每晚EclipseLink标签:
<强>根强>
在下面的课程中,我们有三个List
属性。 List
个对象中有两个为空,一个为空。请注意,emptyChoiceList
字段与@XmlElements
映射。 @XmlElements
注释指出可能的节点名称为foo
和bar
。
package forum10453441;
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlType(propOrder={"nullList", "emptyList", "emptyChoiceList"})
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
private List<String> nullList = null;
private List<String> emptyList = new ArrayList<String>();
@XmlElements({
@XmlElement(name="foo", type=String.class),
@XmlElement(name="bar", type=String.class)
})
private List<String> emptyChoiceList = new ArrayList<String>();
}
<强>演示强>
以下代码演示了如何指定MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS
属性。
package forum10453441;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.MarshallerProperties;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, true);
Root root = new Root();
marshaller.marshal(root, System.out);
}
}
<强>输出强>
现在在输出中,空列表被编组为空数组。对于使用@XmlElememts
映射的字段,在JSON表示中使用了指定的节点名称。
{
"emptyList" : [ ],
"foo" : [ ]
}