Преобразование двух типов json в один и тот же объект

Я пишу структуру для API веб-службы, которая возвращает json. Я использую библиотеку Джексона для десериализации строки json. API возвращает свойство для продолжения получения результата запроса. Такой ответ:

{
    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);

person Hunsu    schedule 06.01.2015    source источник
comment
Ваш вопрос сбивает с толку. Таким образом, все ответы имеют переменную continueToken, но запросы имеют другое имя переменной, в которую можно передать continueToken? Не могли бы вы взять токен из ответа и передать его в нужную переменную запроса, а затем сериализовать в json?   -  person Deepak Bala    schedule 06.01.2015


Ответы (1)


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

  1. Переберите ключи JSON, как в этом сообщении.
  2. Используйте field.getKey().endsWith("continue"), чтобы найти нужный ключ
  3. Замените ключ в узле JSON, используя код из этот пост с "continueToken"
  4. Теперь получите свой объект Response
person Kostas Chalkias    schedule 06.01.2015