我正在使用 Spring Data JPA 開發 Spring Boot 應用程式。我正在使用自定義 JPQL 查詢按某個欄位分組并獲取計數。以下是我的存盤庫方法。
@Query("SELECT v.status.name, count(v) as cnt FROM Pet v GROUP BY v.status.name")
List<Object[]> countByStatus();
它正在作業,結果如下:
[
[
"pending",
1
],
[
"available",
4
]
]
但是,我希望我的 Rest 端點以如下格式的輸出進行回應
{
"pending": 1,
"available": 4
}
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
基本上,您想要生成一個 JSON,其中它的屬性(“待定”、“可用”)是動態的并且來自SELECT v.status.name查詢的一部分。
創建一個 DTO 來保存行值:
package com.example.demo;
public class ResultDTO {
private final String key;
private final Long value;
public ResultDTO(String key, Long value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public Long getValue() {
return value;
}
}
更改您的查詢以每行創建一個新的 ResultDTO:
@Query("SELECT new com.example.demo.ResultDTO(v.status.name, count(v)) as cnt FROM Pet v GROUP BY v.status.name")
List<ResultDTO> countByStatus();
- “com.example.demo”是我的包,你應該把它改成你的。
然后從您的服務類或您的控制器中,您必須將 轉換List<ResultDTO>為Map<String, Long>保存所有行的鍵和值。
final List<ResultDTO> repositoryResults = yourRepository.countByStatus();
final Map<String, Long> results = repositoryResults.stream().collect(Collectors.toMap(ResultDTO::getKey, ResultDTO::getValue));
您的控制器應該能夠轉換final Map<String, Long> results為所需的 JSON
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311309.html
