解决springboot jpa Could not write JSON: No serializer found for class org.hibernate.proxy.pojo.javass

Posted 做人如水,做事如山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决springboot jpa Could not write JSON: No serializer found for class org.hibernate.proxy.pojo.javass相关的知识,希望对你有一定的参考价值。

出现问题 

{
    "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

 

以上是关于解决springboot jpa Could not write JSON: No serializer found for class org.hibernate.proxy.pojo.javass的主要内容,如果未能解决你的问题,请参考以下文章

bug记录jpa 解决org.hibernate.lazyinitializationexception could not initialize proxy - no session

SpringBoot 使用JPA时解决no session的方法

SpringBoot2 JPA No Identifier specified for entity的解决办法

log4j:WARN No appenders could be found for logger ().解决方案

SpringBoot JPA懒加载异常 - com.fasterxml.jackson.databind.JsonMappingException: could not initialize pr

Springboot使用@Autowired注入Mapper接口编译错误“Could not autowire. No beans of ‘UserMapper‘ type found.“