踩坑紀錄
使用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