我正在使用Spring MVC实现REST api。要求是:
/transactions
返回一系列交易。/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 :(得分:4)
您可以在控制器中简单地提供两种方法。第一个使用
返回List<Transaction>
映射
@RequestMapping("/transactions")
,第二个返回List<TransactionSummaryByCategory>
并使用
@RequestMapping(value = "/transactions", params = "groupByCategory")
答案 1 :(得分:1)
您可以返回通用列表。
public List<?> getTransactions()
{
}
根据请求参数,您可以使用适当的对象填充列表