Moxy:对象列表XML和JSON不能同时看起来很好

 梦-回忆-记忆-梦_429 发布于 2023-02-11 00:53

我有一个问题是让Moxy为继承对象列表生成"好"的XML和JSON.XML查找或JSON看起来都很好,但不是同时.这是模型:

public static abstract class Animal {
    private String name;

    protected Animal() {
    }
    protected Animal(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
@XmlRootElement
public static class Tiger extends Animal {
    public Tiger() {
    }
    public Tiger(String name) {
        super(name);
    }
}

@XmlRootElement
public static class Lion extends Animal {
    public Lion() {
    }
    public Lion(String name) {
        super(name);
    }
}

@XmlRootElement
public static class Zoo {
    private List animals = new ArrayList<>();

    @XmlElementRef
    public List getAnimals() {
        return animals;
    }
    public void setAnimals(List animals) {
        this.animals = animals;
    }
    public void addAnimal(Animal a) {
        animals.add(a);
    }
}

从以下Zoo实例生成的XML和JSON

    zoo = new Zoo();
    zoo.addAnimal(new Tiger("Hobbes"));
    zoo.addAnimal(new Lion("Simba"));
    zoo.addAnimal(new Tiger("Sherikan"));

看起来像:

  
  
     
        Hobbes
     
     
        Simba
     
     
        Sherikan
     
  
  {
     "zoo" : {
        "tiger" : [ {
           "name" : "Hobbes"
        }, {
           "name" : "Sherikan"
        } ],
        "lion" : [ {
           "name" : "Simba"
        } ]
     }
  }

XML看起来也是我想要的,但JSON很奇怪.Moxy使用类型作为键的方式不会保留列表中元素之间的顺序.这是一个错误或功能吗?

如果我改变了注释Zoo.animals,以@XmlElementJSON的输出看起来不错,但XML输出已改变的东西,我不能使用.

  {
     "zoo" : {
        "animals" : [ {
           "type" : "tiger",
           "name" : "Hobbes"
        }, {
           "type" : "lion",
           "name" : "Simba"
        }, {
           "type" : "tiger",
           "name" : "Sherikan"
        } ]
     }
  }
  
  
     
        Hobbes
     
     
        Simba
     
     
        Sherikan
     
  

我想出解决这个问题的唯一方法是创建一个外部OXM绑定文件来覆盖注释Zoo.animals.下面的绑定是使用JAXBContextProperties.OXM_METADATA_SOURCE的属性注册的.

  
  
     
        
           
              
           
        
     
  

有没有更好的解决方案,不使用外部绑定文件?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有