1

我的课程结构如下:

@XmlRootElement(name="rootClass")
@XmlAccessorType(XmlAccessType.FIELD)
public class rootClass {

    @XmlElementWrapper(name="children")
    @XmlElement(name="child", type=childClass.class)
    private List<childClass> children;

    // Constructor, Getters, Setters    
}

public class childClass {
    private String name;
}

如果实例绑定到 xml,它看起来像这样,完全符合预期:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<rootClass>
    <children>
        <child>
            <name>Peter</name>
        </child>
        <child>
            <name>Griffin</name>
        </child>
    </children>
</rootClass>

但在 JSON 中,它看起来像这样:

{
    "children": {
        "child": [
            {
                "name": "Peter"
            },
            {
                "name": "Griffin"
            }
        ]
    }
}

虽然我希望它看起来像这样:

{
    "children": [
        {
            "name": "Peter"
        },
        {
            "name": "Griffin"
        }
    ]
}

这种行为是由错误的注释引起的还是由于缺少注释参数的结果?

4

1 回答 1

2

注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。

下面是如何通过利用 MOXy 作为 JSON 绑定提供程序来获得此行为wrapperAsArrayName

import java.util.*;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;

public class MyApplication  extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        HashSet<Class<?>> set = new HashSet<Class<?>>(1);
        set.add(MyService.class);
        return set;
    }

    @Override
    public Set<Object> getSingletons() {
        MOXyJsonProvider moxyJsonProvider = new MOXyJsonProvider();
        moxyJsonProvider.setWrapperAsArrayName(true);

        HashSet<Object> set = new HashSet<Object>(1);
        set.add(moxyJsonProvider);
        return set;
    }

} 

了解更多信息

于 2013-04-10T11:17:24.743 回答