我正在使用EclipseLink的MOXy作为我的RESTEasy项目中的JAXB实现。MOXy的高级功能(由@XmlDiscriminatorNode & Value等注释带来)对我帮助很大。一切都很好,除了一件事: JSON支持。我使用的是RESTEasy的JettisonMappedContext,但不幸的是,在编组之后,我的JSON中只有实例变量字段属于抽象超类。
@XmlRootElement
@XmlDiscriminatorNode("@type")
public abstract class Entity {
public Entity(){}
public Entity(String id){
this.id = id;
}
private String id;
@XmlElement
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}子类:
@XmlRootElement
@XmlDiscriminatorValue("photo")
public class Photo extends Entity{
private String thumbnail;
public Photo(){}
public Photo(String id) {
super(id);
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
@XmlElement(name="thumbnail")
public String getThumbnail() {
return thumbnail;
}
}编组后的XML:
<object type="photo">
<id>photoId423423</id>
<thumbnail>http://dsadasadas.dsadas</thumbnail>
</object>编组后的JSON:
"object":{"id":"photoId423423"}有没有其他方法可以做到这一点?
谢谢。
发布于 2011-04-04 23:21:08
更新2
MOXy已经发布了JSON2.4,其中包含了EclipseLink绑定:
更新1
了解EclipseLink 2.4中添加的原生MOXy对象到JSON绑定的峰值:
确保您的模型类中包含了一个名为jaxb.properties的文件,该文件包含以下条目:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory如果没有此条目,将使用参考实现,并且EclipseLink JAXB (MOXy)扩展将不会出现在生成的XML/JSON中。
使用我的博客中的@DescrimatorNode example,生成的XML将是:
<customer>
<contactInfo classifier="address-classifier">
<street>1 A Street</street>
</contactInfo>
</customer>当我编组利用丢弃时:
StringWriter strWriter = new StringWriter();
MappedNamespaceConvention con = new MappedNamespaceConvention();
AbstractXMLStreamWriter w = new MappedXMLStreamWriter(con, strWriter);
marshaller.marshal(customer, w);
System.out.println(strWriter.toString());然后我得到以下JSON:
{"customer":{"contactInfo":{"@classifier":"address-classifier","street":"1 A Street"}}}有关JAXB和JSON的更多信息,请参阅:
https://stackoverflow.com/questions/5510697
复制相似问题