什么JAXB bean对应于这个JSON?

时间:2012-11-30 16:04:39

标签: java jquery json java-ee jersey

JSON是:

{"list": [1,2,3,4,5,6,7,8,9,10]}

以下是我实现JAXB bean的方法:

package com.anon.sortweb.jaxb;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;

@XmlRootElement
public class JsonBean {
    @XmlElement(name="list")
    private int[] list;

    public JsonBean() {}

    public void setList(int[] list) {
        this.list = list;
    }

    public int[] getList() {
        return list;
    }
}

我的Web应用程序运行正常(我能够成功访问其他资源)但是这一个资源(我将JSON传递给它)会返回415 Media Type Unsupported异常。

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces("text/html")
public String sortAndReturnHtml(JsonBean listBean) { ... }

如何正确编写JAXB bean以封装整数列表?

提前致谢!

1 个答案:

答案 0 :(得分:1)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

您的JAXB bean是JSON数据的完美合理表示。 JAXB (JSR-222)规范不包含JSON绑定,因此答案最终归结为JAX-RS实现如何解释JAXB元数据以生成/使用JSON。

<强>演示

以下是它如何与MOXy一起使用。

package forum13648734;

import java.util.*;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.jaxb.JAXBContextProperties;

public class Demo {

    public static void main(String[] args) throws Exception {
        Map<String, Object> properties = new HashMap<String, Object>(2);
        properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
        properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);
        JAXBContext jc = JAXBContext.newInstance(new Class[] {JsonBean.class}, properties);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        StreamSource json = new StreamSource("src/forum13648734/input.json");
        JsonBean jsonBean = unmarshaller.unmarshal(json, JsonBean.class).getValue();

        Marshaller marshaller = jc.createMarshaller();
        marshaller.marshal(jsonBean, System.out);
    }

}

<强> input.json /输出

{"list":[1,2,3,4,5,6,7,8,9,10]}

了解更多信息