首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MOXy JSON支持

MOXy JSON支持
EN

Stack Overflow用户
提问于 2011-04-01 16:12:57
回答 1查看 2.2K关注 0票数 2

我正在使用EclipseLink的MOXy作为我的RESTEasy项目中的JAXB实现。MOXy的高级功能(由@XmlDiscriminatorNode & Value等注释带来)对我帮助很大。一切都很好,除了一件事: JSON支持。我使用的是RESTEasy的JettisonMappedContext,但不幸的是,在编组之后,我的JSON中只有实例变量字段属于抽象超类。

代码语言:javascript
复制
@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;
    }
}

子类:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
<object type="photo">
   <id>photoId423423</id>
   <thumbnail>http://dsadasadas.dsadas</thumbnail>
</object>

编组后的JSON:

代码语言:javascript
复制
"object":{"id":"photoId423423"}

有没有其他方法可以做到这一点?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-04 23:21:08

更新2

MOXy已经发布了JSON2.4,其中包含了EclipseLink绑定:

  • http://www.eclipse.org/eclipselink/releases/2.4.php

更新1

了解EclipseLink 2.4中添加的原生MOXy对象到JSON绑定的峰值:

  • http://blog.bdoughan.com/2011/08/json-binding-with-eclipselink-moxy.html

确保您的模型类中包含了一个名为jaxb.properties的文件,该文件包含以下条目:

代码语言:javascript
复制
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

如果没有此条目,将使用参考实现,并且EclipseLink JAXB (MOXy)扩展将不会出现在生成的XML/JSON中。

使用我的博客中的@DescrimatorNode example,生成的XML将是:

代码语言:javascript
复制
<customer>
   <contactInfo classifier="address-classifier">
      <street>1 A Street</street>
   </contactInfo>
</customer>

当我编组利用丢弃时:

代码语言:javascript
复制
StringWriter strWriter = new StringWriter();
MappedNamespaceConvention con = new MappedNamespaceConvention();
AbstractXMLStreamWriter w = new MappedXMLStreamWriter(con, strWriter);
marshaller.marshal(customer, w);
System.out.println(strWriter.toString());

然后我得到以下JSON:

代码语言:javascript
复制
{"customer":{"contactInfo":{"@classifier":"address-classifier","street":"1 A Street"}}}

有关JAXB和JSON的更多信息,请参阅:

  • http://bdoughan.blogspot.com/2011/04/jaxb-and-json-via-jettison.html
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5510697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档