1

オブジェクトの ArrayList を返すジャージー Web サービス リソースにメソッドがあります。

@GET
@Path("/GetMyObjects")
public List<MyObjectDTO> getMyObject() {
    List<MyObjectDTO> myObjects = new ArrayList<MyObjectDTO>();
    // ... fill the list ...
    return myObects;
}

これは機能しますが、ACCEPTヘッダーがapplication/xmlに設定されている場合、ArrayList を表すルート XML オブジェクトは<myObjectDTOes>. フレームワークは、パラメーター化された型を反映してリストに名前を付け、いくつかの基本的な文法規則を適用して複数形にするのではないかと推測しています。私の質問は、これを次のようにオーバーライドするにはどうすればよいですか<myObjectList>

ありがとう

4

1 に答える 1

3

@XmlRootElement(name="yourName")POJO で使用して、Jersey 応答で返される XML 要素に名前を付けることができます。

最初のコメントに基づいて更新

私が知る限り、Jersey + JAXB でこの問題を解決する最善の方法は、不要な重複のように聞こえるラッパー クラスを定義することです。

@XmlRootElement(name="yourName")
class JaxbCollectionWrapper<T> {

  private Collection<T> objects;

  @XmlElement(name="singleObjectName")
  public Collection<T> getObjects() {/* BLAH */}

}

また@XmlElementWrapper、ジャージーとの併用はできませんのでご注意ください。

RESTEasy を使用する場合は、必要なものを提供できる直接的なソリューションがあります。ここ@Wrappedに記載されています。

于 2012-08-21T20:29:13.653 に答える