2015-01-06 3 views
1

Я пишу фреймворк для веб-службы api, который возвращает json. Я использую библиотеку Джексона для десериализации строки json. Api возвращает свойство для продолжения получения результата запроса. Ответ такой:Преобразование двух типов json в один и тот же объект

{ 
    continueToken:"token", 
    results: [ 
       { 
       }, 
      ] 
} 

Все ответы имеют эту структуру. Единственная проблема заключается в том, что имя свойства continue отличается от запроса другим. Зовут как этот

prefix + "continue" 

Я хочу создать только один класс, и чтобы иметь возможность сопоставить JSON к этому классу. Как я могу это сделать? Вот что я хочу:

public class Response { 
    private String continueToken; 
    private List<Article> results; 

    public Response (String continueToken, Article[] articles) { 
     this.continueToken = continueToken; 
     this.results = Arrays.asList(articles); 
    } 
} 
//Here the name is ttcontinue 
String json = request.get(type1); 
Response r = jsonToResponse(json); 

//Here the name is llcontinue 
json = request.get(type2); 
r = jsonToResponse(json); 
+0

Ваш вопрос сбивает с толку. Таким образом, все ответы имеют переменную 'continueToken', но у запросов есть другое имя переменной, в котором нужно передать' continueToken'? Не могли бы вы взять маркер из ответа и передать его в нужную переменную на запрос, а затем сериализовать в json? –

ответ

1

hm .. У вас есть имя динамического поля, решения аннотации не могут работать. Если предположить, что нет другого JSON поля, оканчивающегося на «продолжить» (который имеет место в вашем примере), вы можете выполнить следующие действия:

  1. перебирать ключи JSON как в this post
  2. Использования field.getKey().endsWith("continue") найти нужную клавишу
  3. Заменить ключ в вашем JSON узла с помощью кода из this post с "continueToken"
  4. Теперь получить ваш Response объект
Смежные вопросы