1

JSONは次のとおりです。

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

JAXBBeanを実装する方法は次のとおりです。

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アプリケーションは正常に動作します(他のリソースに正常にアクセスできます)が、この1つのリソース(JSONを渡す)は415 MediaTypeUnsupported例外を返します。

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

整数のリストをカプセル化するようにJAXBBeanを正しく作成するにはどうすればよいですか?

前もって感謝します!

4

1 に答える 1

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 / Output

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

詳細については

于 2012-11-30T20:48:38.037 に答える