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

配置Jackson以在Spring Boot中省略延迟加载属性

逑何平
2023-03-14

在纯java配置的spring boot mvc项目中,如何配置Jackson以省略延迟加载属性

共有3个答案

容阳焱
2023-03-14

如果您使用的是SpringBoot,理想情况下您应该已经有了Hibernate4模块。否则,请添加此依赖项

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-hibernate4</artifactId>
        <version>2.5.3</version>
    </dependency>

接下来,创建一个名为“HibernateAwareObjectMapper”的类或任何您想命名的类:

包括以下内容:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;

    public class HibernateAwareObjectMapper extends ObjectMapper {

        public HibernateAwareObjectMapper() {
            registerModule(new Hibernate4Module());
        }
    }

对于不同版本的Hibernate,请参阅以下Hibernate模块:

// for Hibernate 4.x:
mapper.registerModule(new Hibernate4Module());
// or, for Hibernate 5.x
mapper.registerModule(new Hibernate5Module());
// or, for Hibernate 3.6
mapper.registerModule(new Hibernate3Module());

现在需要通过消息转换器注册HibernateAwareObject映射器。为此,创建一个扩展WebMvcAutoConfiguration的配置类。WebMvcAutoConfigurationAdapter。(如果您已经有了一个,请执行下一步)。

现在使用HibernateObjectMapper注册MessageConverter:

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
    List<MediaType> supportedMediaTypes=new ArrayList<>();
    supportedMediaTypes.add(MediaType.APPLICATION_JSON);
    supportedMediaTypes.add(MediaType.TEXT_PLAIN);
    MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter();
    converter.setObjectMapper(new HibernateAwareObjectMapper());
    converter.setPrettyPrint(true);
    converter.setSupportedMediaTypes(supportedMediaTypes);
    converters.add(converter);
    super.configureMessageConverters(converters);
}

中提琴!!!这应该足够了。这是为SpringBootWeb应用程序实现这一点的纯java(无xml)方式。

如果您想添加到答案,请随时发表评论。

毋炳
2023-03-14

I用户springboot和hibernamte5.0. x。它工作!

1.聚甲醛。xml

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-hibernate5</artifactId>
    <version>2.8.4</version>
</dependency>

2.网络配置

@Configuration
public class WebConfig implements WebMvcConfigurer {

    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        for (HttpMessageConverter converter : converters) {
            if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
                ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
                mapper.registerModule(new Hibernate5Module());
                // replace Hibernate4Module() with the proper class for your hibernate version.
            }
        }
    }
}
尉迟卓
2023-03-14

使用最新版本的Spring Boot,这要容易得多。

com类型的任何bean。fasterxml。杰克逊。数据绑定。模块将自动向自动配置的Jackson2ObjectMapperBuilder注册,并应用于它创建的任何ObjectMapper实例。这提供了一种全局机制,用于在向应用程序添加新功能时提供自定义模块。

74.3自定义Jackson ObjectMapper

首先确保您具有所需的Jackson依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-hibernate4</artifactId>
</dependency>

然后,您可以将模块作为@Bean包含在应用程序上下文中。

@Bean
public Module hibernate4Module()
{
    return new Hibernate4Module();
}
 类似资料:
  • 问题内容: 我正在尝试把我的头围住Swift语言。使用Objective-C在代码中构建视图时,常见的模式是覆盖UI属性并像这样延迟加载它们: 这允许将UIElement的配置包含在其设置中,但是不会导致每次都对其进行重新配置。 看来我们无权访问Swift中的后备存储,并且关键字实际上没有相同的语义。 我很好奇是否有人在Swift中找到了类似的模式,该模式允许人们以一种简洁的语法方式将变量和常量的

  • 问题内容: foo类有一个酒吧。除非访问,否则不会加载钢筋。进一步访问bar应该不会产生任何开销。 是否可以使用属性或更好的属性来执行类似的操作,而不是使用getter方法? 目标是在所有后续访问中无负载地延迟加载… 问题答案: 当前的答案存在一些问题。具有属性的解决方案要求您指定其他类属性,并且在每次查找时都要检查该属性。该解决方案的问题在于,它会隐藏该属性,直到首次访问。这不利于自省,并且不便

  • 描述 (Description) 延迟加载可应用于图像,背景图像和淡入效果,如下所述 - 对于图像 要在图像上使用延迟加载,请按照给定的步骤进行操作 - 使用data-src属性而不是src属性来指定图像源。 将类lazy添加到图像。 <div class = "page-content"> ... <img data-src = "image_path.jpg" class = "l

  • 问题内容: 我在JPA实体中的延迟加载属性有问题。我读过许多类似的问题,但它们与spring或hibernate有关,并且他们的后代不适用或没有帮助。 该应用程序是在Wildfly应用程序服务器上运行的JEE和JPA2.1。有两个实体,DAO会话bean和servlet将它们放在一起: 当我运行此代码时,它失败并显示: 我对WebLogic / JPA1使用了非常相似的模式,并且运行平稳。任何的想

  • 问题内容: 我想知道在node.js中使用是否等效于延迟加载? 例如,如果我有一个函数需要代码中其他任何地方都不需要的特定node.js包,那么我最好在该函数内部使用它,以便仅在调用该函数时才包含所需的包。 我还不确定是否会由于缺乏对node.js架构的了解而在性能方面有所改善?我想它每次与服务器的连接都会使用更少的内存。但是,当它必须读取程序包时,它会增加磁盘的I / O吗,还是将其添加到内存中

  • 这是从这里开始的后续行动。 我正在实现一个表,它将数据异步加载到表单元格中。问题是,表单元格有时无法正确更新。有时它会以某种方式“挂起”并永远显示“加载...”。实际值只有在我在表中滚动一点时才会更新。 要复制,请在表格中快速向下滚动应用程序。某些单元格不会显示“延迟加载”值,而是显示占位符字符串。 延迟加载属性如下所示: } 应用程序如下所示: 完整的可运行代码可以在这里找到。