当前位置: 首页 > 知识库问答 >
问题:

使用@JSONIdentityInfo时的null ID在反序列化过程中失败

南门英飙
2023-03-14

我正在使用Jackson的@jsonIdentityInfo注释生成漂亮的对象图。

@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, 
                   property="id")
public class MemberFieldDef implements Def
{
    @Id @GeneratedValue(generator="myGen")
    private String 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)

瞬态物体有解决方案吗?

共有1个答案

罗晨
2023-03-14

我们使用这里提供的解决方案修复了它,使用JSONInclude:

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

希望它对你同样有效!

 类似资料:
  • 问题内容: 你好(对不起我的英语) 我正在开发使用Spring SPRING MVC的json前端网站消耗Web服务的Web服务。spring mvc使用JsonIdentityInfo选项进行序列化,因此每个对象仅在json中写入一次,并且每次都使用引用进行写入,例如她使用相同的对象“ component”有2个“ computer”,因此spring将ID设置为第一个组件(“ @compone

  • 我有一个Micronaut应用程序,可以构建到GraalVM原生映像中。当我从正常的角度运行应用程序时(也就是说,不使用Graal),它运行得非常好。 但是,当我尝试从Graal运行时,在尝试将字符串反序列化到枚举中时,会出现以下运行时异常: 作为参考,我的反序列化程序如下所示: 我想我可能需要为Graal添加一些自定义反射配置,但我不太确定。有人能在这里透露一些信息吗?

  • 我有一个用户对象,它被发送到服务器和从服务器发送。当我发出user对象时,我不想将散列密码发送给客户端。因此,我在password属性中添加了,但这也阻止了它反序列化为密码,这使得用户在没有密码时很难注册。 如何才能只让应用于序列化而不应用于反序列化?我使用的是Spring JSONView,所以我对没有太多的控制权。 将添加到属性 仅在getter方法上添加

  • 问题内容: 我有一个发送到服务器或从服务器发送的用户对象。发送用户对象时,我不想将哈希密码发送给客户端。因此,我添加了password属性,但这也阻止了将其反序列化为密码,这使得在没有密码的情况下很难注册用户。 我怎样才能只应用序列化而不是反序列化?我使用的是Spring JSONView,因此对的控制不多。 我尝试过的事情: 添加到属性 仅添加getter方法 问题答案: 确切的操作方法取决于你

  • 问题内容: 我有一个发送到服务器或从服务器发送的用户对象。发送用户对象时,我不想将哈希密码发送给客户端。因此,我添加了password属性,但这也阻止了将其反序列化为密码,这使得在没有密码的情况下很难注册用户。 我怎样才能只应用序列化而不是反序列化?我使用的是Spring JSONView,因此对的控制不多。 我尝试过的事情: 添加到属性 仅添加getter方法 问题答案: 确切的操作方法取决于你

  • 我们正在尝试使用具有net core后端的流,但出现反序列化错误 协议是版本3.14.0 grpc-web-gen是1.2.1 生成客户端的命令是:协议-我=。/原型。/原型/*. proto-js_out=import_style=通用js,二进制:。/dist--grpc-web_out=import_style=通用js dts,模式=grpcwebtext:。/dist 我们成功连接到en