解决Spring和JPA集成 配置了延时加载 而造成的no-Session和noSerializer的问题

本文介绍了在Spring与JPA集成时,由于配置延时加载导致的no-Session问题及其解决方法,即通过在web.xml中配置过滤器。同时,文章还探讨了解决因Hibernate添加字段导致的序列化问题,提出了两种解决方案:使用@JsonIgnoreProperties注解或提供通用的解决方式。
摘要由CSDN通过智能技术生成

no-Session 问题产生的原因

在我们配置了延时加载时 导致了EntityManager的提前关闭 等到再次使用的时候 Spring即找不到了

如何解决

我们只需要在web.xml 中配置一个过滤器 就可以再次让Spring 找到

 <!--配置过滤器(Spring为我们写好的:让我们EntityManager对象在页面展示完后再关闭)-->
    <filter>
        <filter-name>openEntityManager</filter-name>
        <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>openEntityManager</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

noSerialize问题的解决

但我们解决 上面的问题时 随之而来就是这个问题 不能序列化 那是怎么来的呢?是因为呀,hibernate添加了一些字段(变成Json时报错)
解决方案一:字段上加注解 @JsonIgnoreProperties(value={“hibernateLazyInitializer”,“handler”,“fieldHandler”})
这种一般不用 你想想 以后的项目太大 每个实体类你都要去配置 那肯定是不可能的呀!所以我们一般都用下面那种一劳用逸的方法
解决方案二:直接复制到你的项目就可以用

					**新建一个类:**
package cn.com.aijiejieya.common;


import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

public class CustomMapper extends ObjectMapper{

    public CustomMapper() {
        this.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        // 设置 SerializationFeature.FAIL_ON_EMPTY_BEANS 为 false
        this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    }
}

			**再去SpringMVC的配置文件添加一个配置**
 <mvc:annotation-driven>
        <!-- 解决懒加载报错问题-->
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json; charset=UTF-8</value>
                        <value>application/x-www-form-urlencoded; charset=UTF-8</value>
                    </list>
                </property>
                <!-- No serializer:配置 objectMapper 为我们自定义扩展后的 CustomMapper,解决了返回对象有关系对象的报错问题 -->
                <property name="objectMapper">
                    <bean class="cn.com.aijiejieya.common.CustomMapper"></bean>
                </property>
            </bean>
 </mvc:message-converters>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值