注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB 2 (JSR-222)专家组的成员。
我不确定 Jackson 是否支持这个用例,但下面是一个示例,说明如何利用 MOXy 的@XmlPath
扩展来满足您的要求。请注意,从 2012 年 4 月 7 日起,您将需要使用 EclipseLink 2.4.0 夜间标签或更新版本。
物品
on的author
属性Item
映射为@XmlPath('.')
。这意味着 的内容Author
被拉到与 的内容相同的级别Item
。我还需要使用XmlAdapter
forDate
属性,因为您使用的格式与 MOXy 的默认表示不匹配。
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;
}
日期适配器
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
必须将使用以下条目调用的文件jaxb.properties
与域类放在同一包中,以将 MOXy 指定为 JAXB (JSR-222) 提供程序。
javax.xml.bind.context.factory = org.eclipse.persistence.jaxb.JAXBContextFactory
输入.json/输出
{
"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"
}
了解更多信息