Я использую клиент Джерси 1.8 + JAXB. Я хочу, чтобы опубликовать полезную нагрузку JSON, который выглядит следующим образом:Использование пользовательского контекста JAXB с клиентом Джерси
{
"transactions": [
{
"amount":
{
"currency":"EUR","total":"1"
}
...
}
],
}
У меня есть DTO, который выглядит следующим образом:
@XmlRootElement
public class PaymentRequestDTO
{
@XmlElement(name="transactions")
public List<TransactionDTO> getTransactions()
{
return transactions;
}
}
Когда список содержит только один сделку, хотя то, что я отправляю это:
{
"transactions": {
"amount":
{
"currency":"EUR","total":"1"
}
...
}
}
Сделки не рассматриваются как массив ... Я потерял пару часов, чтобы исследовать этот вопрос, в том числе. много поиска в SO, и я прочитал, что мне нужно зарегистрировать свой собственный контекстный резольвер ->here.
Так вот:
@Provider
public class XXXJAXBContextResolver implements ContextResolver<JAXBContext>
{
private JAXBContext context;
private Class<?>[] types = { PaymentRequestDTO.class, TransactionDTO.class, AmountDTO.class };
public XXXJAXBContextResolver() throws Exception
{
this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), types);
}
@Override
public JAXBContext getContext(Class<?> objectType)
{
for (Class<?> type : types)
{
if (type == objectType)
{
return context;
}
}
return null;
}
}
Сама регистрация:
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(XXXJAXBContextResolver.class);
client = Client.create(cc);
Я использовал так называемые естественные обозначения:
Природная JSON нотацию, задействуя тесно -coupled JAXB RI интеграция. Выражение
Пример JSON:
{ "столбцы": [{ "ID": "USERID", "метка": "UserID"}, { "ID": "название", "метка":» Пользователь Имя "}]," строки ": [{" USERID ": 1621" Название ":" Grotefend "}]}
Link.
По-прежнему такой же результат - нет массива в полезной нагрузке. Я что-то упускаю?