2016-04-02 21 views
1

Proje iki varlık vardır:dönüştürme hazırda varlık: yerine bütün nesnenin oblectId

@Entity 
public class Customer { 
@Id 
@GeneratedValue(strategy = IDENTITY) 
@Column(name = "id", unique = true, nullable = false) 
private Integer id; 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "city_id", nullable = true) 
private City city; 
... 
} 

ve JSON

@Entity 
public class City { 
@Id 
@GeneratedValue(strategy = IDENTITY) 
@Column(name = "id", unique = true, nullable = false) 
private Integer id; 

@Column(name = "name", nullable = false) 
private String name; 
... 
} 

cutomer varlık GSON veya Jackson dönüştürür kullanarak

{ 
"id":1, 
"city":{"id":1, "name":"New York"} 
} 
olarak

Ben onu dönüştürmek istiyorum

olarak dönüştürür
{ 
"id":1, 
"city_id":1 
} 

Bunu gson veya jackson ile nasıl yapabilirim?

+0

Bunu başarmak için özel bir Serializer kullanmalısınız. @Satmurat –

+1

Lütfen Bu Bağlantıdaki Cevabımı Kontrol Edin> [Serileştiriciyi Özelleştirme Nasıl Kullanılır] (https://stackoverflow.com/questions/35592831/should-serialization-logic-be-in-the-entity-or-other-class/35593831 # 35593831) –

+1

@VikrantKashyap, her varlık için serializer yazma güzel değil. – Satmurat

cevap

0

Bu soru size yardımcı olabilir.

Gson: How to exclude specific fields from Serialization without annotations

Bunu gerçekleştirmek için doğrudan bir yol olup olmadığını bilmiyorum, ama bu yapılabilir hangi dolaylı yolları vardır. Örneğin, private City city'u transient olarak işaretleyebilir ve city_id adlı başka bir alanı yalnızca şehir kimliği olarak gösterebilirsiniz. Bunun gibi bir şeye benzeyebiliriz:

@Entity 
public class Customer { 
    @Id 
    @GeneratedValue(strategy = IDENTITY) 
    @Column(name = "id", unique = true, nullable = false) 
    private Integer id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "city_id", nullable = true) 
    private transient City city; 

    private int city_id; 
    ... 
} 
İlgili konular