注: 私はEclipseLink JAXB(MOXy)のリーダーであり、JAXB 2(JSR-222)エキスパートグループのメンバーです。
元の回答
次の拡張リクエストが入力されました。以下のリンクを使用して、この問題の進捗状況を追跡できます。
アップデート
2012年5月19日以降のEclipseLink2.4.0ラベルでは、次のプロパティを設定して、探している動作を取得できます。
marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, true);
毎晩のEclipseLinkラベルは次の場所からダウンロードできます。
根
次のクラスには、3つのList
プロパティがあります。2つはList
オブジェクトが空で、1つはnullです。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" : [ ]
}