解决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

 

posted @ 2020-03-09 23:57  做人如水,做事如山  阅读(877)  评论(0编辑  收藏  举报