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>