3

オブジェクトをマーシャリングするためにJAXBを使用してJAX-RSを作成しています。NameValuePairPascalCaseで送信したい単純なオブジェクトがあります。キャメルケースラッパーでラップされていることを除いて、すべてが機能します<nameValuePairs>

これは私のクラスです:

@XmlRootElement(name = "NameValuePair")
public class NameValuePair implements Serializable {

    private String name = null;
    private String value = null;

    public NameValuePair( String name, String value ) {
        this.name = name;
        this.value = value;
    }

    @XmlElement(name = "Name")
    public String getName() {
        return name;
    }

    @XmlElement(name = "Value")
    public String getValue() {
        return value;
    }
}

使用方法は次のとおりです。

public Response getNameValuePairs() {
    NameValuePair[] nameValuePairs;
    try {
        nameValuePairs = manager.getNameValuePairs();
    } catch (Exception e) {
        return Response
                .status(Response.Status.INTERNAL_SERVER_ERROR)
                .build();
    }

    return Response
            .status(Response.Status.OK)
            .entity(nameValuePairs)
            .build();
}

ただし、返されるXMLは次のようになります。

<nameValuePairs>
    <NameValuePair>
        <Name>A Name</Name>
        <Value>1</Value>
    </NameValuePair>
    <NameValuePair>
        <Name>Another Name</Name>
        <Value>2</Value>
    </NameValuePair>
</nameValuePairs>

スキーマの残りの部分と一致するように変更<nameValuePairs>するにはどうすればよいですか?<NameValuePairs>

4

1 に答える 1

4

XMLのルートノードに配列名が使用されているようです。私にとって最も簡単な方法は、エンティティをリストにラップするようです。

@XmlRootElement(name="NameValuePairs")
public class NameValuePairs {
    List<NameValuePair> nameValuePairs;
}

そして戻る:

public Response getNameValuePairs() {
    return Response
        .entity(new NameValuePairs(...))
        .build();
}
于 2012-10-12T16:19:31.323 に答える