将响应转换为 JSON 格式 spring
Converting response to JSON format spring
嗨,当我做一个正常的 SELECT 语句时,我正在努力解决这个问题 returns 一个 JSON 响应但是当我做一个 SELECT COUNT 语句时returns 像这样
我也希望它采用 JSON 格式
@Repository
public interface FinanceRepository extends JpaRepository<Finance, Long>{
List<Finance> findTop5ByOrderByRevenueDesc();
List<Finance> findTop5ByOrderByProfitDesc();
@Query(
value = "SELECT currency, COUNT(currency) AS tally FROM finance "
+ "GROUP BY currency ORDER BY tally DESC LIMIT 5",
nativeQuery=true)
List<?> findByCurrency();
}
控制器
@GetMapping("/topCurrency")
private List<?> getTopCurrency(){
return financeRepository.findByCurrency();
}
这是我目前所做的
public class CurrencyResponse {
@JsonProperty("Currency")
private List<?> currency;
public List<?> getCurrency() {
return currency;
}
public void setCurrency(List<?> currency) {
this.currency = currency;
}
}
控制器
@GetMapping("/topCurrency")
private ResponseEntity<?> getTopCurrency(){
CurrencyResponse response = new CurrencyResponse();
response.setCurrency(financeRepository.findByCurrency());
return new ResponseEntity<>(response, HttpStatus.OK);
}
它returns这个
Currency:[
"USD",
3,
"EURO",
2,
"PESO",
1
]
但我希望它是这样的
{
"USD":3,
"EURO":2,
"PESO":1
}
我的 POM 已经有了 jackson 依赖,在此先感谢
您应该在 pom.xml 文件中包含 Jackson 依赖项以及以下内容
...
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
...
..然后在你的控制器中应该有以下内容
...
@RestController
@RequestMapping("/topCurrency")
...
最后 ResponseEntity 模型应该是这样的,尝试为映射编写一个类似的实用程序 class,你应该会看到生成的正确格式
...
List<JSONObject> entities = new ArrayList<JSONObject>();
for (Entity n : entityList) {
JSONObject entity = new JSONObject();
entity.put("aa", "bb");
entities.add(entity);
}
return new ResponseEntity<Object>(entities, HttpStatus.OK);
}
...
我已经通过更改
修复了它
List<?> findByCurrency();
进入
List<Object[]> findByCurrency();
控制器
@GetMapping("/topCurrency")
private ResponseEntity<List<Object>> getTopCurrency(){
List<Object[]> results = financeRepository.findByCurrency();
List<Object> currencyList = new ArrayList<>();
for(Object[] object : results) {
Map<Object, Object> currencies = new LinkedHashMap<>();
currencies.put("Currency", object[0]);
currencies.put("Tally", object[1]);
currencyList.add(currencies);
}
return new ResponseEntity<>(currencyList, HttpStatus.OK);
}
因为查询 returns 的值就像一个二维数组,我使用 List
嗨,当我做一个正常的 SELECT 语句时,我正在努力解决这个问题 returns 一个 JSON 响应但是当我做一个 SELECT COUNT 语句时returns 像这样
我也希望它采用 JSON 格式
@Repository
public interface FinanceRepository extends JpaRepository<Finance, Long>{
List<Finance> findTop5ByOrderByRevenueDesc();
List<Finance> findTop5ByOrderByProfitDesc();
@Query(
value = "SELECT currency, COUNT(currency) AS tally FROM finance "
+ "GROUP BY currency ORDER BY tally DESC LIMIT 5",
nativeQuery=true)
List<?> findByCurrency();
}
控制器
@GetMapping("/topCurrency")
private List<?> getTopCurrency(){
return financeRepository.findByCurrency();
}
这是我目前所做的
public class CurrencyResponse {
@JsonProperty("Currency")
private List<?> currency;
public List<?> getCurrency() {
return currency;
}
public void setCurrency(List<?> currency) {
this.currency = currency;
}
}
控制器
@GetMapping("/topCurrency")
private ResponseEntity<?> getTopCurrency(){
CurrencyResponse response = new CurrencyResponse();
response.setCurrency(financeRepository.findByCurrency());
return new ResponseEntity<>(response, HttpStatus.OK);
}
它returns这个
Currency:[
"USD",
3,
"EURO",
2,
"PESO",
1
]
但我希望它是这样的
{
"USD":3,
"EURO":2,
"PESO":1
}
我的 POM 已经有了 jackson 依赖,在此先感谢
您应该在 pom.xml 文件中包含 Jackson 依赖项以及以下内容 ...
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
... ..然后在你的控制器中应该有以下内容 ...
@RestController
@RequestMapping("/topCurrency")
... 最后 ResponseEntity 模型应该是这样的,尝试为映射编写一个类似的实用程序 class,你应该会看到生成的正确格式 ...
List<JSONObject> entities = new ArrayList<JSONObject>();
for (Entity n : entityList) {
JSONObject entity = new JSONObject();
entity.put("aa", "bb");
entities.add(entity);
}
return new ResponseEntity<Object>(entities, HttpStatus.OK);
}
...
我已经通过更改
修复了它List<?> findByCurrency();
进入
List<Object[]> findByCurrency();
控制器
@GetMapping("/topCurrency")
private ResponseEntity<List<Object>> getTopCurrency(){
List<Object[]> results = financeRepository.findByCurrency();
List<Object> currencyList = new ArrayList<>();
for(Object[] object : results) {
Map<Object, Object> currencies = new LinkedHashMap<>();
currencies.put("Currency", object[0]);
currencies.put("Tally", object[1]);
currencyList.add(currencies);
}
return new ResponseEntity<>(currencyList, HttpStatus.OK);
}
因为查询 returns 的值就像一个二维数组,我使用 List