首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Hibernate 查詢結果轉 JSON 的正確姿勢:手動序列化或使用 Jackson/Gson 庫

     編輯:程式設計疑難解答

直接回答

Hibernate 不支持直接返回 JSON,查詢方法(list()/uniqueResult()/scroll())均返回 Java 對象(實體/DTO/Object[])。

轉換方案

方案一:Jackson ObjectMapper(推薦,Spring Boot 默認)

@Autowired ObjectMapper objectMapper;

List users = session.createQuery("from User").list();
String json = objectMapper.writeValueAsString(users);
// 輸出: [{"id":1,"name":"Tom"},{"id":2,"name":"Jerry"}]

配置忽略空值/循環引用:

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

方案二:Gson

Gson gson = new GsonBuilder()
    .excludeFieldsWithoutExposeAnnotation()
    .setDateFormat("yyyy-MM-dd HH:mm:ss")
    .create();
String json = gson.toJson(users);

方案三:Hibernate 投影查詢直接構造 Map

List> list = session.createQuery(
    "select new map(u.id as id, u.name as name) from User u")
    .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
    .list();
// 直接 gson.toJson(list) 更輕量

注意事項

  • 實體類含雙向關聯(@OneToMany/@ManyToOne)會導致循環引用,需 @JsonIgnore 或 DTO 斷開。
  • 大數據量分頁查詢,避免一次性序列化導致 OOM。
  • Spring MVC @RestController 自動調用 HttpMessageConverter(Jackson)序列化返回對象,無需手動轉換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved