Только что обновил ответ

я есть такие лица:

@Entity
public Product {
   @Id
   public int id;

   public String name;

   @ManyToOne(cascade = {CascadeType.DETACH} )
   Category category

   @ManyToMany(cascade = {CascadeType.DETACH} )
   Set<Category> secondaryCategories;


}

а также

@Entity
public Category {
   @Id
   public int id;

   public String name;

    @JsonCreator
    public Category(int id) {
        this.id = id;
    }

    public Category() {}
}

Можно ли аннотировать либо простоCategory класс илиcategory а такжеsecondaryCategories свойства с аннотацией, которая будет сериализовать их, чтобы они были просто их идентификаторами, когда они встроены.

Прямо сейчас я получаю с сервера, когда я делаю GET для продукта с id = 1:

{ 
  id: 1,
  name: "product 1", 
  category: {id: 2, name: "category 2" }, 
  secondaryCategories: [{id: 3, name: "category 3" }, 
                        {id: 4, name: "category 4" }, 
                        {id: 5, name: "category 5" }] 
}

можно ли вернуться:

{ 
  id: 1,
  name: "product 1", 
  category: 2, 
  secondaryCategories: [3, 4, 5]
}

АннотированиеCategory класс с@JsonIdentityReference(alwaysAsId = true) работает в целом, но также возвращает только идентификаторы, когда я выбираю одну или список категорий. Мне нужно преобразование идентификатора только тогда, когда Категория встроена.

Спасибо!

Ответы на вопрос(1)

@JsonIdentityReference(alwaysAsId = true) только для переменной категории.

Например.:

@Entity
public Product {
   @Id
   public int id;

   public String name;

   @ManyToOne(cascade = {CascadeType.DETACH} )
   @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope=Category.class)
   @JsonIdentityReference(alwaysAsId = true)
   Category category;

   @ManyToMany(cascade = {CascadeType.DETACH} )
   Set<Category> secondaryCategories;


}
 Michail Michailidis10 окт. 2017 г., 10:40
хотя он работал для сериализации (GET), он, вероятно, конфликтовал с конструктором @JsonCreator категории во время десериализации (PUT / POST) - я получаю:org.springframework.http.converter.HttpMessageNotReadableException","message":"JSON parse error: Unresolved forward references for: ; nested exception is com.fasterxml.jackson.databind.deser.UnresolvedForwardReference
 Michail Michailidis09 окт. 2017 г., 19:45
Я попробовал это, и я все еще получаю вложенные объекты - что-нибудь, что мне не хватает?
 Sachin Gupta10 окт. 2017 г., 06:06
Я обновил код, чтобы указать имя свойства, используя@JsonIdentityInfo, Я думаю, что это будет работать.
 Sachin Gupta10 окт. 2017 г., 11:10
Только что обновил ответ
 Michail Michailidis09 окт. 2017 г., 11:31
о, я не пробовал эту аннотацию на имущество! Я попробую и скажу! Еще один вопрос, поскольку FetchType - это LAZY, будет ли это сокращать объединение с таблицей категорий?

Ваш ответ на вопрос