解决springboot jpa Could not write JSON: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer
出现问题
{
"timestamp": 1583769258574,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.http.converter.HttpMessageNotWritableException",
"message": "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: springboot.learn.entities.User_$$_jvst863_0[\"handler\"])",
"path": "/user/1",
"company": "mg",
"ext": null
}
解决问题
原因
因为jsonplugin用的是Java的内审机制.hibernate会给被管理的pojo加入一个hibernateLazyInitializer属性,jsonplugin会把hibernateLazyInitializer也拿出来操作,并读取里面一个不能被反射操作的属性就产生了这个异常.
package springboot.learn.entities; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import javax.persistence.*; //使用JPA 注解配置映射关系 @Entity//告诉JPA这是一个实体类 (和数据表映射的类) @Table(name = "tpl_user") @JsonIgnoreProperties({"hibernateLazyInitializer","handler"})// 忽略json配置 public class User {
application.properties的配置
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://39.105.167.131:3306/smile_boot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true username: root password: Nrblwbb7$ jpa: properties: hibernate: hbm2ddl: auto: update #数据库表的migration dialect: org.hibernate.dialect.MySQL5InnoDBDialect #规定数据库未innodb型 format_sql: true show-sql: true#在控制台打印sql