如何在 spring-mvc 中为 REST 查询提供对象列表?
Posted
技术标签:
【中文标题】如何在 spring-mvc 中为 REST 查询提供对象列表?【英文标题】:How to provide a list of objects for a REST query in spring-mvc? 【发布时间】:2015-03-22 13:08:53 【问题描述】:我想在spring-mvc
中创建一个 REST-GET 控制器,它接受一个对象列表,例如 10 个 id,如下所示:
@RestController
public class MyRest
@RequestMapping(method = RequestMethod.GET)
public Object test(@RequestParam value="id" required=false) List<Integer> ids)
Sysout(ids);
无论如何,当我调用它时,我必须多次重复 id 参数:
localhost:8080/app?id=1&id=2&id=3&...
可以将参数更改为某种列表吗?例如
app?id=1,2,3,4,5
如果是,这是否可取?从客户的角度来看,什么更好?
【问题讨论】:
两者都可以,但不推荐任何一种。如果您想汇总这么多信息,请以 json/xml 格式发送一些信息。因此,对于您的问题的答案,请使用第一种格式 - 从用户的角度来看,它更具可读性。 在***.com/questions/2602043/…上讨论了相同的要求 【参考方案1】:控制器:
public @ResponseBody String getInfos(HttpServletRequest request,
@RequestParam @DateTimeFormat( @RequestParam List<Long> ids) ...
请求:
http://localhost:8080/test/api?ids=1,2,3
【讨论】:
【参考方案2】:您可以提供对象列表作为请求参数来休息服务。这里是示例
@RequestMapping(value = "/animals, method = RequestMethod.GET)
public void test(@RequestParam(value="animalsNames[]") String[] animalsNames)
Sysout(animalsNames);
你的请求看起来像
http://localhost:8080/appname/animals?animalsNames[]=dog,horse
HTTP Method type : GET
【讨论】:
您能否提供使用自定义对象而不是字符串的示例?例如里面有两个变量的对象?【参考方案3】:最好使用带有 JSON 或 XML 的 POST 消息作为请求正文。 因为你永远不知道会传递多少个 id。
@RestController
public class MyRest
@RequestMapping(method = RequestMethod.POST)
public Object test(@RequestBody IDRequest request)
Sysout(ids);
public static final class IDRequest
List<Integer> ids;
<!-- getter/setters--->
请求将是某种 JSON 或 XML 格式
"ids":[1,2,3,4,5,6,7,8,9]
【讨论】:
我不同意。修改系统状态时使用 POST。在这种情况下,他只想取回数据,所以 GET 比 POST 好,甚至重复 id 参数以上是关于如何在 spring-mvc 中为 REST 查询提供对象列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpenAPI (Swagger) 中为同一路径定义不同的查询参数?
如何在 django-rest-framework 中为 API 使用 TokenAuthentication
如何在scala akka(spray)中为rest服务编写测试用例
如何在 Django Rest Framework 的 REST API 中为数组数据编写序列化程序?
请求令牌时如何在 Azure 存储 Blob 中为 REST 请求指定范围? [AZURE-BLOB][REST API]