2015-06-08 16 views
5

Güzel nesne grafikleri oluşturmak için Jackson'un @JsonIdentityInfo ek açıklamalarını kullanıyorum.@JsonIdentityInfo kullanıldığında null ID serileştirme sırasında

Ben (bir hazırda varlık da) Aşağıdaki nesne:

@Entity 
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, 
        property="id") 
public class MemberFieldDef implements Def 
{ 
    @Id @GeneratedValue(generator="myGen") 
    private String id; 

    .... 
} 

Bu sınıf bir nesne grafiği zaman parçası, seri hale getirme sırasında çalışıyor, ama yeni, geçici varlık göndermek istediğinizde

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of VALUE_NULL token 
at [Source: [email protected]; line: 1, column: 2] (through reference chain: net._95point2.sarbase.cohort.entity.MemberFieldDef["id"]) 
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) 
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:762) 
    at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:59) 
    at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:12) 
    at com.fasterxml.jackson.databind.deser.impl.ObjectIdValueProperty.deserializeSetAndReturn(ObjectIdValueProperty.java:90) 
    at com.fasterxml.jackson.databind.deser.impl.ObjectIdValueProperty.deserializeAndSet(ObjectIdValueProperty.java:82) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:306) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeWithObjectId(BeanDeserializerBase.java:1036) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:122) 
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3066) 
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2221) 
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:205) 
: seri kaldırma başarısız olur

{ 
    "id":null, 
    ... 
} 

henüz bir kimliği olması ve sahip değildir Jackson, içinden

Yığın traması, Jackson'ın normal StringDeserializer'ı kullanmadığını gösterir. Bu, boş değer için null değerini döndürür, ancak boş değerlere izin vermiyor gibi görünen ObjectIdValueProperty değerini kullanır.

Geçici nesneler için bir çözüm var mı?

+0

Merhaba! Herhangi bir çözüm buldunuz mu? – LeoLozes

+0

Sadece "NO_ID" veya -1 gibi bilinen bir yer tutucuyu, devam etmeden önce silinen tele göndermek için .... en iyisi değil: / –

cevap

1

Biz JsonInclude kullanarak, here sağlanan çözüm kullanarak düzelttim:

@JsonInclude(Include.NON_NULL) 
public class Shop { 
    //... 
} 

o sizin için de çalışır Umut!

0

Ben bu bir soru olduğunu biliyorum, ama ben böyle bir şey için hedef nesneyi döndüğünü toplama maddesinin kodlayarak Bu sorunu çözmek başardı: Ayrıca, null emin eşittir/hashCode hesaplarını yapmak

public MemberFieldDef getMemberFieldDef() { 
     return (this.memberFieldDef == null || this.memberFieldDef.getId() == null)?null:this.memberFieldDef; 
    } 

kimliğini hashCode'un bir parçası olarak kullanıyorsanız değerler.

İlgili konular