Resumen de problemas con Spring Boot

Pregunta 1: Cuando Spring Boot usa JPA, hay un problema al acceder a la tabla de la base de datos en el Controlador y mostrarla en el navegador como (ResponseBody)

HTTP Status 500 - 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 SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) ) 

----- Clase de entidad Usuario (correspondiente a tb_user en la base de datos)

//使用JPA
@Entity                    //是一个跟数据库对应的类
@Table(name="tb_user")    //指定生成的表名
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)     //主键id自增长
    private Integer id;

    @Column(name = "email")
    private String email;

    @Column(name = "last_name", length = 50)    //驼峰命名法, 并约定最长长度为50
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
//只需要继承JpaRepository类, 便可使用数据库的CRUD,分页以及排序操做
//<User,Integer> 表示的是操作的实体类, 以及主键类型
public interface UserRepository extends JpaRepository<User, Integer> {
}

archivo de configuración application.yml

spring:
  datasource:
    username: root
    password: *****
    url: **************
    driver-class-name: com.mysql.jdbc.Driver
  # 更新或者创建表结构
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

--UserController class, hay un método para encontrar User por id y devolverlo al navegador para mostrarlo en Json

@RestController
public class UserController {

    @Autowired
    UserRepository userRepository;

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id") int id)
    {
        User user = userRepository.getOne(id);
        return user;
    }
}

Entonces ... tan pronto como lo visite, aparecerá el navegador


Intellij idea 中



大概 就是: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: no se encontró ningún serializador para la clase org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer y no se descubrieron propiedades para crear BeanSerializer (para evitar excepciones, deshabilite SerializationFeature.FAIL_BEON_EM) cadena de referencia: com.gdufe.entity.User _ $$ _ jvst21_0 ["handler"])

Luego busqué en Google un poco: descubrí que el problema parecía deberse a que la entidad estaba cargada de pereza y serialización antes de que estuviera completamente cargada.

La solución es: agregar un comentario en la clase de usuario

@JsonIgnoreProperties({
    
    "hibernateLazyInitializer", "handler"})
如下图

Retrasar la carga configurando el objeto proxy de hibernación. Anotando que la clase tiene una propiedad privada de carga retrasada para evitarla

problema resuelto


Supongo que te gusta

Origin blog.csdn.net/qq_31281327/article/details/80086517
Recomendado
Clasificación