Подтвердить что ты не робот

Как сериализовать только идентификатор ребенка с Джексоном

Есть ли встроенный способ сериализации идентификатора дочернего элемента при использовании Jackson (quickxml.jackson 2.1.1)? Мы хотим отправить Order через REST, который имеет ссылку Person. Однако объект person довольно сложный, и мы можем обновить его на стороне сервера, поэтому все, что нам нужно, это первичный ключ.

Или для этого нужен специальный сериализатор? Или мне нужно @JsonIgnore все остальные свойства? Из-за этого данные Person будут отправляться обратно при запросе объекта Order? Я еще не уверен, если мне это понадобится, но я бы хотел контролировать его, если это возможно...

4b9b3361

Ответ 1

Есть несколько способов. Сначала нужно использовать @JsonIgnoreProperties для удаления свойств из дочернего элемента, например:

public class Parent {
   @JsonIgnoreProperties({"name", "description" }) // leave "id" and whatever child has
   public Child child; // or use for getter or setter
}

другая возможность, если дочерний объект всегда сериализуется как id:

public class Child {
    // use value of this property _instead_ of object
    @JsonValue
    public int id;
}

и еще один подход - использовать @JsonIdentityInfo

public class Parent {
   @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
   @JsonIdentityReference(alwaysAsId=true) // otherwise first ref as POJO, others as id
   public Child child; // or use for getter or setter

   // if using 'PropertyGenerator', need to have id as property -- not the only choice
   public int id;
}

который также будет работать для сериализации и игнорирует свойства, отличные от id. Однако результат не был бы обернут как Object.