2015-05-19 2 views
0

Я использую клиент Джерси 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.

По-прежнему такой же результат - нет массива в полезной нагрузке. Я что-то упускаю?

ответ

0

Для информации:

Я активировал отображение POJO (означает, что джексон используется внизу) и JSON генерируется, что мне нужно ...... ммм ...

ClientConfig cc = new DefaultClientConfig(); 
cc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); 
Смежные вопросы