私はjsonをRESTサービスとJAXB名前空間にPOSTすることに頭を悩ませようとしています。Resteasy を使用してサーバー側のメソッドをマークアップしています。次のサービスがあります。
@POST
@Mapped(namespaceMap={@XmlNsMap(namespace="http://acme.com", jsonName=""))
@Path("/search")
@Consumes("application/json")
public List<I> search(SearchCriteria crit);
次のオブジェクトがあります。
@XmlRootElement(namespace="http://acme.com")
public class DateCriteria {
@XmlElement
private Date start;
@XmlElement
private Date end;
}
@XmlRootElement(namespace="http://acme.com")
public class MultCriteria {
@XmlElementRefs({@XmlElementRef(type=DateCriteria.class)})
private List<DateCriteria> dateCriterias;
}
投稿で次の JSON を送信でき、機能します。
{ "acme.MultCriteria": { "acme.DateCriteria": { startDate: "2009/01/01", endDate: "2009/01/01" } } }
このサービスでは、DateCriteria の単一要素リストを持つ MultCriteria オブジェクトを取得します。奇妙なことに、サービスを空の名前空間へのマップでマークしたにもかかわらず、JSON オブジェクトで名前空間を渡す必要があります。
次のように配列を送信しようとすると:
{ "acme.MultCriteria": { "acme.DateCriteria": [ { startDate: "2009/01/01", endDate: "2009/01/01" }, { startDate: "2009/01/01", endDate: "2009/01/01" } ] } }
DateCriteria のリストが空の MultCriteria オブジェクトを取得します。空の名前空間を持つように DateCriteria オブジェクトを変更すると、上記の構文は正常に機能します。
ここで私が間違っていることを誰かが見ていますか? 名前空間はどのようにセットアップする必要がありますか?また、それらをサービスに適切に渡すにはどうすればよいですか?