java - सभी एम्बेडेड एनोटेट किए गए ऑब्जेक्ट्स के लिए एकल कस्टम सीरियलाइज़र जो उन्हें अपने आईडी के साथ बदल देता है



json serialization (1)

मेरे पास ऐसी संस्थाएं हैं

@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 category टिप्पणियों को एनोटेशन के साथ एनोटेट करना संभव है, जो उन्हें एम्बेडेड होने पर केवल अपने आईडी होने के लिए सीरियल कर देगा।

अभी मैं सर्वर से प्राप्त कर रहा हूं जब मैं आईडी = 1 के साथ उत्पाद के लिए GET बना देता हूं:

{ 
  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]
}

@JsonIdentityReference(alwaysAsId = true) साथ Category वर्ग की टिप्पणियां आम तौर पर काम करती हैं लेकिन मैं सिर्फ एक ही आईडी देता हूं जब मैं एक या श्रेणियों की सूची लाता हूं। मुझे आईडी रूपांतरण की आवश्यकता है, जब श्रेणी एम्बेडेड हो।

धन्यवाद!

https://code.i-harness.com


आपको श्रेणी चर पर @JsonIdentityReference(alwaysAsId = true) का उपयोग @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;


}




spring-data