Я пытался обвести голову POSTing json в службу REST и пространства имен JAXB. Я использую Resteasy, чтобы пометить метод на стороне сервера. У меня есть следующие услуги:REST + json + JAXB + пространства имен
@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" } } }
На службе, Я получаю объект MultCriteria с единственным списком элементов DateCriteria. Как ни странно, я должен передать пространство имен в объекте JSON, даже если я пометил службу картой пустым пространством имен.
Если я пытаюсь отправить массив следующим образом:
{ "acme.MultCriteria": { "acme.DateCriteria": [ { startDate: "2009/01/01", endDate: "2009/01/01" }, { startDate: "2009/01/01", endDate: "2009/01/01" } ] } }
Я получаю объект MultCriteria с пустым списком DateCriteria. Если я изменяю объект DateCriteria так, чтобы он имел пустое пространство имен, то приведенный выше синтаксис отлично работает.
Кто-нибудь видит, что я делаю неправильно здесь? Как должны быть созданы пространства имен и как правильно передать их службе?