hibernate返回的實體類對象無法轉JSON響應給前端

  1. 踩坑紀錄

踩坑紀錄

使用SpringBoot data JPA查詢數據要響應給前端時報錯,報錯內容如下:

No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer

解決方案:

經查詢後發現若使用getById查詢,這個對象是個hibernate的代理對象,而不是實體,里面基本沒有值,所以無法轉換。

要使用findById查詢,返回的對象為Optional包裝的實體對象,使用下面的代碼將查詢結果取出

    @GetMapping(value = "/api/good/{id}")
    public Good queryGood(@PathVariable("id") int id, Model model){
        System.out.println("調用了queryGood()");
        Optional<Good> good = goodService.queryGood(id);
        return good.orElse(null);   //若good內不為空,將good取出,若為空則返回null
    }

下面為findById與getById的注釋

/**
     * Retrieves an entity by its id.
     * 
     * @param id must not be {@literal null}.
     * @return the entity with the given id or {@literal null} if none found
     * @throws IllegalArgumentException if {@code id} is {@literal null}
     */
    T findOne(ID id);

/**
     * Returns a reference to the entity with the given identifier.
     * 
     * @param id must not be {@literal null}.
     * @return a reference to the entity with the given identifier.
     * @see EntityManager#getReference(Class, Object)
     */
    T getOne(ID id);

注意getById是“Returns a reference“


轉載請注明來源,歡迎對文章中的引用來源進行考證,歡迎指出任何有錯誤或不夠清晰的表達。可以郵件至 b8954008@gmail.com