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

如何序列化包含惰性关联的json

陈松
2023-03-14

我有一个Person实体,它与Contact实体具有@manytoone关联,而fetch类型为lazy。我正在使用spring-boot来公开REST API。我的一个POST调用包含嵌套JSON,用于保存父实体Person以及关联Contact

由于contact获取类型是惰性的,我遇到了以下异常

    ERROR 17415 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.example.rest.RestResultObject["results"]->java.util.ArrayList[0]->com.example.model.Person["contact"]->com.example.model.Contact_$$_jvst8d1_4["handler"])] with root cause

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.example.rest.RestResultObject["results"]->java.util.ArrayList[0]->com.example.model.Person["contact"]->com.example.model.Contact_$$_jvst8d1_4["handler"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.9.3.jar:2.9.3]

不改变接触到渴望。有没有什么最好的办法来解决这个问题?

public class Person {
    private long id;
    private String name;
    private String rno;
    @ManyToOne(fetch = FetchType.LAZY)
    private Contact contact;

    // Getters and setters
}
public class Contact {
    private long id;
    private String info;
    @OneToMany
    private List<Person> persons;
}

共有1个答案

程智明
2023-03-14

我添加了以下内容

  • @每个对象上的实体
  • 将id中的long更改为long,如果您使用spring data JPA
  • 添加@id将id声明为主键
  • @jsonbackreference&@jsonmanagedreference避免Jackson
  • 的无限循环

人类

@Entity
public class Person {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;

 private String name;

 private String rno;

 @JsonManagedReference
 @ManyToOne(fetch = FetchType.LAZY)
 private Contact contact;

 //setter & getter
@Entity
public class Contact {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;

 private String info;

 @JsonBackReference
 @OneToMany(cascade = CascadeType.ALL, mappedBy = "contact")
 private List<Person> persons;

 //setter & getter
}
<dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-hibernate5</artifactId>
</dependency>
@Configuration
public class JacksonConfig {

@Bean
public Jackson2ObjectMapperBuilderCustomizer addCustomBigDecimalDeserialization() {
    return new Jackson2ObjectMapperBuilderCustomizer() {
        @Override
        public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
            jacksonObjectMapperBuilder.featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
            jacksonObjectMapperBuilder.modules(new Hibernate5Module());
        }

    };
}
}
 类似资料:
  • 问题内容: 我正在尝试用Java创建一个简单的图像编辑程序。我制作了一个对象,其中包含有关正在编辑的图像的所有信息(一些基本属性,所应用的效果列表,层列表等),我想要一种简单的方法将其保存到磁盘,以便稍后再次打开。 我发现使用Java的defualt 接口可能正是我想要的,我可以将整个对象写到文件中,稍后再读回内存中。但是,包括和不能序列化(其他所有方法都可以)。 我知道可以重写和方法,但我从未这

  • 下面是一个重现我的问题的示例项目:https://github.com/deathcoder/hazelcast-shared-session

  • 问题内容: 我有一个实体: 然后我有一个控制器,其目的是检索书籍,我的问题是,流派字段包含在控制器的json响应中。有什么办法可以排除杰克逊序列化对象时延迟加载的那些字段? 这是我的ObjectMapper的配置: 谢谢! 我无法将其标记为JsonIgnore,因为它将永远在序列化框中。有时候,我将需要随书一起检索体裁,到那时,我将在查询中使用“获取联接”,因此它不会为null。 问题答案: 你可

  • 问题内容: 顾名思义,我正在尝试将包含一些BufferedImages(包括其他变量,字符串等)的对象保存到文件中。 我发现了这一点: 如何序列化包含BufferedImages的对象 它的工作原理就像一种魅力,但有一点点挫折:如果您的对象仅包含一个图像,它就可以很好地工作。 我一直在努力获取他的解决方案以处理多个图像(理论上应该可以使用),但是每次读入文件时,我都会得到对象,图像数量正确,但只有

  • 问题内容: 如果我做类似的事情: 那么它只会打印出约会数据,而不是相关的职员数据。如果我执行result [0] .staff.inpsect,那么我当然会得到人员数据。 问题是我想将它作为JSON(包括人员行)返回给AJAX。如何强制它包含人员行,还是必须遍历并手动创建内容? 问题答案: 是一种说法,没有。您需要在控制器中执行以下操作: 您需要在“约会”和“职员”之间建立关联才能正常工作。

  • 我已经从多个源hdf5文件构建了一个巨大的dask阵列。 假设数据仅来自一个hdf5文件: 然后,我将dask数组中的(惰性)片段排列到一个xarray数据集中 现在我想序列化xr_data对象,所以我不需要每次都计算它。 xArray DataArray中的数据通过dask懒惰地映射到hdf5文件。我怎么连载(咸菜?Netcdf?...)能够在“懒惰映射”持续存在的情况下重新加载x数组对象? 谢

  • 问题内容: 我需要一些有关将包含多维数组的JSON对象转换为类的帮助。我试图反序列化json对象,但失败了。JsonMaclar类对象为null。请帮忙。 脚本代码; C#代码; 问题答案: 我建议您使用JSON.NET。它是一个开放源代码库,用于将c#对象序列化和反序列化为json,将Json对象序列化为.net对象… 序列化示例: Json.NET 4.5版本8 –多维数组支持,Unicode

  • 我试图用angularjs和SpringMVC构建一个应用程序。我有两个类Privance和Comunidad。: 在我的控制器中: 有人能帮我举个简单的例子吗?