Could not write JSON: could not initialize proxy - no Session;

在spring boot中使用jackson作为rest controller出入参的序列化库,出现Could not write JSON: could not initialize proxy - no Session; nested exception is com.fasterxml.jackson.databind.JsonMappingException异常

原因分析:

DAO层使用的是spring data jpa,其依赖hibernate4,而出现异常的repository里有懒加载的对象

解决办法:

添加Hibernate4Module到默认的MappingJackson2HttpMessageConverter中,需要做的是:

1.重写配置类(继承WebMvcConfigurerAdapter)的configureMessageConverters方法

2.注册Hibernate4Module

示例:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter{

    //其他配置....

    public MappingJackson2HttpMessageConverter jacksonMessageConverter(){
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();

        ObjectMapper mapper = new ObjectMapper();
        //Registering Hibernate4Module to support lazy objects
        mapper.registerModule(new Hibernate4Module());

        messageConverter.setObjectMapper(mapper);
        return messageConverter;

    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //Here we add our custom-configured HttpMessageConverter
        converters.add(jacksonMessageConverter());
        super.configureMessageConverters(converters);
    }

    //其他配置....
}

最后一点,不要忘了引入依赖:

根据自己的hibernate使用版本(hibernate4或hibernate5)和jackson版本${jackson.version}在pom中添加依赖

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-hibernate4</artifactId>
    <version>${jackson.version}</version>
</dependency>

or

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-hibernate5</artifactId>
    <version>${jackson.version}</version>
</dependency>


 


猜你喜欢

转载自blog.csdn.net/kfeng632/article/details/80757190