注: 私はEclipseLink JAXB(MOXy)のリーダーであり、JAXB 2(JSR-222)エキスパートグループのメンバーです。
Jacksonがこのユースケースをサポートしているかどうかはわかりませんが、以下は、MOXyの@XmlPath
拡張機能を活用して要件を満たす方法の例です。2012年4月7日以降のEclipseLink2.4.0ナイトリーラベルを使用する必要があることに注意してください。
アイテム
上のauthor
プロパティItem
はでマップされ@XmlPath('.')
ます。これは、のコンテンツがのコンテンツとAuthor
同じレベルに引き上げられることを意味しItem
ます。また、使用している形式がMOXyのデフォルトの表現と一致しないXmlAdapter
ため、プロパティにを使用する必要がありました。Date
package forum10036530;
import java.util.Date;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlAccessorType(XmlAccessType.FIELD)
class Item {
private String title;
@XmlElement(name="date")
@XmlJavaTypeAdapter(DateAdapter.class)
private Date createdAt;
@XmlPath(".")
private Author author;
}
著者
package forum10036530;
import java.net.URL;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
class Author {
@XmlElement(name="author")
private String name;
@XmlElement(name="author_avatar")
private URL avatar;
@XmlElement(name="author_group")
private Integer group;
@XmlElement(name="author_prop")
private String prop;
}
DateAdapter
package forum10036530;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class DateAdapter extends XmlAdapter<String, Date> {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
@Override
public Date unmarshal(String string) throws Exception {
return dateFormat.parse(string);
}
@Override
public String marshal(Date date) throws Exception {
return dateFormat.format(date);
}
}
jaxb.properties
MOXyをJAXB(JSR-222)プロバイダーとして指定するには、次のエントリで呼び出されるファイルjaxb.properties
をドメインクラスと同じパッケージに配置する必要があります。
javax.xml.bind.context.factory = org.eclipse.persistence.jaxb.JAXBContextFactory
input.json / Output
{
"title" : "Hello world!",
"date" : "2012-02-02 12:23:34",
"author" : "username",
"author_avatar" : "http://www.example.com/foo.png",
"author_group" : 123,
"author_prop" : "value"
}
詳細については