我在Spring Data Rest项目中遇到以下异常:
com.fasterxml.jackson.databind.JsonMappingException:
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: org.springframework.data.rest.webmvc.json.["content"]->test.spring.data.rest.xml.entities.Author_$$_jvstb93_1["handler"])
当然,我有一些实体具有fetch配置= FetchType.LAZY。
我遵循了许多说明和链接,但我仍然有这个例外。
我已经尝试过的事情(没有效果):
在扩展RepositoryRestMvcConfiguration的配置类中添加@EnableHypermediaSupport(type = HypermediaType.HAL)
@Override configureJacksonObjectMapper
在同一个班级中,同时使用Jackson2DatatypeHelper.configureObjectMapper()
:
@Override
protected void configureJacksonObjectMapper(ObjectMapper objectMapper) {
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
Jackson2DatatypeHelper.configureObjectMapper(objectMapper);
}
添加" org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
"在web.xml中过滤
使用此构造函数创建extends ObjectMapper
的自定义类:
public HibernateAwareObjectMapper() {
Hibernate5Module hm = new Hibernate5Module();
registerModule(hm);
}
和这个配置:
<mvc:annotation-driven>
<mvc:message-converters>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="test.spring.data.rest.xml.config.HibernateAwareObjectMapper" />
</property>
</bean>
</mvc:message-converters>
上述任何一项行动都没有解决问题!
如何(绝对)解决这个问题?
感谢。
答案 0 :(得分:4)
我找到了解决这个烦人问题的方法。
对于Spring Data Rest应用程序的每个存储库,必须定义一个自定义@Projection
;在预测中将有必需品领域。
注意如果两个实体之间存在cycylc引用,则必须使用@JsonBackReference
注释(对于@ManyToOne
注释字段)和@JsonManagedReference
注释注释投影的相关方法(对于@OneToMany
带注释的字段),否则JSON序列化中将存在JSON循环。
在每个@Repository
注释(或@RepositoryRestResource
注释)中,必须使用自定义投影将其标记为 excerptProjection 属性。
使用此管理,不需要任何其他配置,Lazy对象的异常最终消失。