Десериализовать ключ карты как ссылку на POJO

Возможно ли в Джексоне получить ссылку на ранее десериализованный объект из той же строки json с учетом его идентификатора?

Например, у меня есть следующие классы Java:

public class Company {
    List<Employee> employeeList;
    List<Customer> customerList;
    ....
}

@JsonIdentityInfo(
        generator = ObjectIdGenerators.PropertyGenerator.class,
        property = "id")
public class Customer {
    Long id;
    ...
}

public class Employee {
    Long id;
    Map<Customer, int> utilityMap;
    ...
}

Я хочу создать экземпляр Company из строки json, которая выглядит так:

{
  "customerList" : [ {
    "id" : 0,
    "name" : "customer0"
  } ],
  "employeeList" : [ {
    "id" : 1,
    "fullName" : "employee0",
    "utilityMap" : {
      "0" : 1
    }
  } ]
}

где ключ 0 в утилитеMap относится к клиенту с идентификатором 0.

С помощью KeyDeserializer я могу создать новый объект Customer, но я хочу, чтобы ключ Map вместо этого был ссылкой на соответствующий объект.

Простым решением было бы изменить подпись Map<Customer, int> на Map<Long, int>, но это невозможно из-за внутренних зависимостей, есть ли другой способ сделать это без изменения модели (аналогично ссылкам xml)?


person M Talluzi    schedule 14.01.2019    source источник
comment
В JSON нет стандарта для ссылок, но есть ряд предложений. Я (пока) не заметил, чтобы Джексон реализовал какой-либо из них. Я нашел вопрос Стандартный способ ссылки на объект по идентификатору полезным и сам использовал синтаксис "$ref" : #/some/path для внутреннего API, но без помощи Джексона.   -  person Stephen P    schedule 14.01.2019
comment
может ли этот заголовок stackoverflow.com/questions/49211176/ help?   -  person thunderhook    schedule 15.01.2019
comment
Спасибо @thunderhook и @stephen-p! Первый подход в ответе @Jose_Da_Silva - это то, что у меня уже есть, но мне нужен был именно тот reference_by_id, о котором упоминал @stephen-p. Аналогично тому, как это делается в xml <entry><Customer reference="1" /><value>1</value></entry>   -  person M Talluzi    schedule 15.01.2019