Джексон: десериализовать ссылку на сложный объект - PullRequest
0 голосов
/ 31 мая 2018

Я вызываю собственный API, который возвращает сложный JSON:

{
    data: {
        id: 123,
        name: 'foo',
        createdBy: {
            id: 234,
            type: 'user'
        },
        currency: {
            id: 456,
            type: 'currency'
        }
    },
    links: {
        user: [
            {
                id: 234,
                fullName: 'Peter'
            }
        ],
        currency: [
            {
                id: 234,
                symbol: 'Euro'
            }
        ]
      }
 }

Вместо ссылки на объект с помощью @idRef или чего-то подобного, они используют объект с двумя свойствами: тип и типЯ бы.Затем мне нужно найти соответствующий объект в структуре ссылок.

Можно ли десериализовать этот JSON с помощью Джексона в:

public class Foo {
    private int id;
    private String name;
    private User createdBy;
    private Currency currency;
}

public class User {
    private int id;
    private String fullName;
}

public class Currency {
    private int id;
    private String symbol;
}

Я попытался найти ответы для "ObjectIdResolver", ноЯ не мог найти способ достичь этого.

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете использовать com.google.gson.Gson; lib для разбора вашей строки JSON в объект Java.Во-первых, вам нужно спроектировать представление Java в строке JSON.

class DataObject{
    public Data data;
    public Links links;
}

class Links{
    public List<User> user;
    public List<Currency> currency;
}

class Data{
    public Long id;
    public String name;
    public CommanObject createdBy;
    public CommanObject currency;
}

class CommanObject{
    public Long id;
    public String type;
}
class User{
    public Long id;
    public String fullName;
}

class Currency{
    public Long id;
    public String symbol;
}

Для анализа строки JSON попробуйте следующий код:

Gson gson = new Gson();
DataObject dataObject = gson.fromJson(metaDataString, DataObject.class);

Второе решение, поскольку вы уже используете Jackson lib, чем попробуйте нижеодин:

ObjectMapper mapper = new ObjectMapper();
DataObject obj = mapper.readValue(jsonInString, DataObject.class); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...