错误:
2018-02-05 14:22:17.567 WARN 520 --- [nio-7900-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: 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); nested exception is 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: com.dynamic.cloud.entity.User_$$_jvste64_0["handler"])
使用的是springBoot的jpa , 在操作实体的时候发生错误
public User findById(@PathVariable Long id) {
// User one = this.userRepository.getOne(id); // 这个需要在实体上加 @JsonIgnoreProperties({ "handler",
// "hibernateLazyInitializer" })
User one = userRepository.findOne(id);
System.out.println(one);
return one;
}
源码可以知道:
/**
* Retrieves an entity by its id.
*
* @param id must not be {@literal null}.
* @return the entity with the given id or {@literal null} if none found
* @throws IllegalArgumentException if {@code id} is {@literal null}
*/
T findOne(ID id);
/**
* Returns a reference to the entity with the given identifier.
*
* @param id must not be {@literal null}.
* @return a reference to the entity with the given identifier.
* @see EntityManager#getReference(Class, Object)
*/
T getOne(ID id);
从错误中可以看出,这个返回值应该是hibernate产生的一个代理
错误原因和解决方法:
1. https://stackoverflow.com/questions/24994440/no-serializer-found-for-class-org-hibernate-proxy-pojo-javassist-javassist
2. https://segmentfault.com/a/1190000000768565