2013-12-03 2 views
0

Я использую Jackson для преобразования json в объект. Однако, json выглядит неправильно. Вот что я вижу:Jackson сериализует странный вывод

"interfaces": {"interfaces": [ 
    "HA_1", 
    "HA_2" 
]}, 

Там не должно быть два interfaces. Я хочу видеть:

"interfaces": [ 
    "HA_1", 
    "HA_2" 
]}, 

Я не уверен, как это происходит. Я могу показать вам мои классы преобразования:

@XmlAccessorType(XmlAccessType.NONE) 
public class InterfacesRep implements Serializable { 
    private static final long serialVersionUID = -1503363608473342020L; 

    @XmlElement(name = "interface", type = String.class) 
    private Collection<String> all = new ArrayList<String>(); 

    public InterfacesRep() {} 

    public InterfacesRep(Collection<String> all) { 
     this.all = all; 
    } 

    public Collection<String> getAll() { 
     return all; 
    } 

    public void setAll(List<String> all) { 
     this.all = all; 
    } 
} 

И внешний класс:

public class OuterRep { 

    private static final long serialVersionUID = -1719378545790376294L; 

    @XmlElement(name = "interfaces", type=InterfacesRep.class) 
    private InterfacesRep interfaces; 

    public OuterRep() { 
    } 

    public InterfacesRep getInterfaces() { 
     return interfaces; 
    } 

    public void setInterfaces(InterfacesRep interfaces) { 
     this.interfaces = interfaces; 
    } 
} 

Вы знаете, почему я вижу "interfaces" дважды?

+0

На самом деле вы должны иметь на выходе один «интерфейс» и один «интерфейс» –

+0

@AndreiI Разве это не то, что у меня уже есть? –

+0

Один является сингулярным, а один - множественным (с и без него). –

ответ

2

Потому что вы определяете его свойство на обоих уровнях. Внешний класс имеет имя свойства, называемое «интерфейсы», а коллекция внутреннего класса также называется «интерфейсы».

Это простейшее решение (на мой взгляд) было бы не использовать класс-обертку для коллекции. Просто поместите коллекцию в внешний класс.

На стороне примечания, почему вы используете XML-аннотации Джэксона для сериализации JSON?

+0

У меня есть и аннотации, потому что я могу запросить XML или JSON представление –

+0

Обратите внимание, что не может быть полностью необходимым: Джексон может использовать свои собственные аннотации для JSON и XML (предполагая, что вы также используете модуль Jackson XML, а не что-то еще?). Но ваше использование аннотаций JAXB также работает, если они вам нужны для библиотеки JAXB, например. – StaxMan

Смежные вопросы