gpt4 book ai didi

jackson - 反序列化期间使用@JsonIdentityInfo 失败时的空 ID

转载 作者:行者123 更新时间:2023-12-03 14:50:53 25 4
gpt4 key购买 nike

我正在使用 jackson 的 @JsonIdentityInfo注释以生成漂亮的对象图。

我有以下对象(它也是一个休眠实体):

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

....
}

这个类在序列化期间工作正常,当是对象图的一部分时,但是当我想通过 Jackson 提交一个新的临时实体时,该实体还没有 ID 并且有
{
"id":null,
...
}

反序列化失败:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of VALUE_NULL token
at [Source: java.io.PushbackInputStream@5950054d; 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)

堆栈跟踪显示 Jackson 没有使用常规的 StringDeserializer - 它为文字 null 返回 null - 但正在使用 ObjectIdValueProperty这似乎不允许空值。

是否有针对 transient 对象的解决方案?

最佳答案

我们使用提供的解决方案修复了它 here , 使用 JsonInclude :

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

希望它也适用于您!

关于jackson - 反序列化期间使用@JsonIdentityInfo 失败时的空 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30709709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com