Tôi đang sử dụng @JsonIdentityInfo
chú thích của Jackson để tạo ra các đồ thị đối tượng tốt đẹp.rỗng ID khi sử dụng @JsonIdentityInfo Thất bại trong deserialization
tôi có các đối tượng sau đây (mà là một thực thể ngủ đông cũng):
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class,
property="id")
public class MemberFieldDef implements Def
{
@Id @GeneratedValue(generator="myGen")
private String id;
....
}
Lớp này hoạt động tốt trong serialization, khi một phần của một đồ thị đối tượng, nhưng khi tôi muốn gửi một thực thể thoáng mới qua Jackson, mà không có một ID được nêu ra và có
{
"id":null,
...
}
Các deserialization không thành công với:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of VALUE_NULL token
at [Source: java.io.Pus[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)
Các stacktrace cho thấy Jackson không được sử dụng thường xuyên StringDeserializer - trả về null cho một null đen - nhưng đang sử dụng ObjectIdValueProperty
mà dường như không cho phép null.
Có một giải pháp cho các đối tượng thoáng qua?
Xin chào! Bạn có (bất kỳ cơ hội nào) tìm ra giải pháp nào không? – LeoLozes
Chỉ để gửi trình giữ chỗ đã biết, chẳng hạn như "NO_ID" hoặc -1 xuống dây bị xóa trước khi lưu giữ .... không phải là tốt nhất: / –