Résumé des problèmes d'utilisation de Spring Boot

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


Je suppose que tu aimes

Origine blog.csdn.net/qq_31281327/article/details/80086517
conseillé
Classement