2015-06-28 38 views
2

我正在使用Spring MVC實現REST api。要求是:Spring MVC - 如何根據查詢參數返回不同的JSON響應?

  1. /transactions返回一個事務數組。
  2. /transactions?groupByCategory返回按類別分組的事務。

例如請求#1返回:

[ 
    { "id": 1, "category": "auto", "amount": 100 }, 
    { "id": 2, "category": "misc", "amount": 200 }, 
    { "id": 3, "category": "auto", "amount": 300 } 
] 

而請求#2組這樣的結果按照類別,並返回每個類別的總和:

[ 
    { "category": "auto", "amount": 400 }, 
    { "category": "misc", "amount": 200 } 
] 

顯然從這些的返回值請求是不同的類型。我如何在Spring MVC中做到這一點?到目前爲止,我有:

@RequestMapping("/transactions") 
public List<Transaction> getTransactions(
     @RequestParam(value="groupByCategory", required=false) String groupByCategory 
     ) { 

    ... 
} 

但是,這會將返回類型修復爲List<Transaction>。我如何適應第二種類型:List<TransactionSummaryByCategory>

編輯:我找到了一個解決方案,即指定返回類型爲Object。這似乎工作,並根據對象類型正確序列化響應。不過,我想知道這是否是最佳做法!

public Object getTransactions(...) { 
    ... 
} 
+0

如何只返回目錄映射。 –

+0

這比我擁有的更好!謝謝。 – Naresh

回答

3

您只需提供您的控制器兩種方法列表中的請求。第一個返回List<Transaction>使用

@RequestMapping("/transactions") 

,第二個返回List<TransactionSummaryByCategory>映射和使用

@RequestMapping(value = "/transactions", params = "groupByCategory") 
+0

謝謝@JB Nizet。這是最優雅的答案。我不知道Spring MVC允許你通過參數縮小請求的範圍! – Naresh

1

您可以返回一個通用列表。

public List<?> getTransactions() 
{ 
} 

基於PARAMS可以填充合適的對象

相關問題