Question 1: Lorsque Spring Boot utilise JPA, il y a un problème lors de l'accès à la table de base de données dans le contrôleur et de son affichage dans le navigateur en tant que (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) )
----- Classe d'entité User (correspondant à tb_user dans la base de données)
//使用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> {
}
fichier de configuration application.yml
spring:
datasource:
username: root
password: *****
url: **************
driver-class-name: com.mysql.jdbc.Driver
# 更新或者创建表结构
jpa:
hibernate:
ddl-auto: update
show-sql: true
--UserController, il existe une méthode pour rechercher un utilisateur par identifiant et le renvoyer au navigateur pour l'afficher dans 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;
}
}
Puis ... dès que vous visitez, le navigateur apparaît
Idée Intellij 中
大概 就是: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: aucun sérialiseur trouvé pour la classe org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer et aucune propriété découverte pour créer BeanSerializer (pour éviter les exceptions, désactivez SerializationFeature.FAIL_ON_EMPTY) (pour éviter les exceptions, désactivez SerializationFeature.FAIL_ON_EMPTY) chaîne de référence: com.gdufe.entity.User _ $$ _ jvst21_0 ["handler"])
Puis googlé un peu: j'ai trouvé que le problème semblait être dû au fait que l' entité était chargée de paresse et de sérialisation avant d'être complètement chargée.
La solution est: ajouter un commentaire sur la classe User
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler"})
如下图
Retardez le chargement en définissant l'objet proxy de mise en veille prolongée. En annotant que la classe a une propriété privée de chargement différé pour la contourner
problème résolu