将响应转换为 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 而不是 List< Object> 并且我通过使用手动将结果放入 JSON 格式地图