当前位置: 首页 > 面试题库 >

如何使用Spring RestTemplate发送数组?

丌官绍元
2023-03-14
问题内容

如何使用Spring RestTemplate发送数组参数?

这是服务器端的实现:

@RequestMapping(value = "/train", method = RequestMethod.GET)
@ResponseBody
public TrainResponse train(Locale locale, Model model, HttpServletRequest request, 
    @RequestParam String category,
    @RequestParam(required = false, value = "positiveDocId[]") String[] positiveDocId,
    @RequestParam(required = false, value = "negativeDocId[]") String[] negativeDocId) 
{
    ...
}

这是我尝试过的:

Map<String, Object> map = new HashMap<String, Object>();
map.put("category", parameters.getName());
map.put("positiveDocId[]", positiveDocs); // positiveDocs is String array
map.put("negativeDocId[]", negativeDocs); // negativeDocs is String array
TrainResponse response = restTemplate.getForObject("http://localhost:8080/admin/train?category={category}&positiveDocId[]={positiveDocId[]}&negativeDocId[]={negativeDocId[]}", TrainResponse.class, map);

以下是实际的请求URL,这显然是错误的:

http://localhost:8080/admin/train?category=spam&positiveDocId%5B%5D=%5BLjava.lang.String;@4df2868&negativeDocId%5B%5D=%5BLjava.lang.String;@56d5c657`

一直在尝试搜索,但是找不到解决方案。任何指针将不胜感激。


问题答案:

Spring的UriComponentsBuilder做到了这一点,并且还允许变量扩展。假设您要将字符串数组作为参数“
attr”传递给资源,而该资源只有一个带有路径变量的URI:

UriComponents comp = UriComponentsBuilder.fromHttpUrl(
    "http:/www.example.com/widgets/{widgetId}").queryParam("attr", "width", 
        "height").build();
UriComponents expanded = comp.expand(12);
assertEquals("http:/www.example.com/widgets/12?attr=width&attr=height", 
   expanded.toString());

否则,如果您需要定义一个应该在运行时扩展的URI,并且您事先不知道数组的大小,请使用带有{?的http://tools.ietf.org/html/rfc6570
UriTemplate。 key *}占位符,并使用https://github.com/damnhandy/Handy-URI-
Templates中
的UriTemplate类将其扩展

UriTemplate template = UriTemplate.fromTemplate(
    "http://example.com/widgets/{widgetId}{?attr*}");
template.set("attr", Arrays.asList(1, 2, 3));
String expanded = template.expand();
assertEquals("http://example.com/widgets/?attr=1&attr=2&attr=3", 
    expanded);

对于Java以外的其他语言,请参见https://code.google.com/p/uri-
templates/wiki/实施。



 类似资料:
  • 问题内容: 我正在尝试做一个GET jQuery,我想发送一个参数。 这是我的功能: 这似乎行不通;使用时,我的servlet中没有空; 如果我在浏览器中输入链接http://www.myite.com/manageproducts.do?option=1,则该链接可以正常运行。 我也尝试过: 这也不起作用。 你能帮我么? 编辑: 也尝试过 仍然得到相同的结果。 问题答案: 如果您说它可以直接在浏

  • 问题内容: 我正在开发一个向服务器发送大量数据的应用程序。现在我想使用volley将一组参数发送到php页面。但是我无法发送它。 用于将参数添加为Array的代码。 向服务器发出请求的代码 代码或CustomJsonObjectRequest 问题答案: 用 在类,因为你目前正在使用类型为在地图值类,但发送时创建的对象类型的类。 编辑: 要将单个参数中的所有值发送到服务器,请使用。使用所有键值创建

  • 问题内容: 我有一个REST端点为: 当我尝试以以下方式访问时: 我的~/Downloads/cookies.txt位置: 服务器什么也没收到: 问题答案: 这为我工作: 我可以使用查看后端的值

  • 问题内容: 我想通过Web应用程序将SMS发送到手机,可以吗?我该怎么做? 问题答案: 您可以使用此免费的Java示例程序使用连接到计算机的GSM调制解调器将PC上的SMS发送到COM端口。您还需要从Sun下载并安装Java comm api。 该程序需要以下Java文件才能运行。 SerialConnection.java(此文件用于从Java程序连接到COM端口) SerialConnecti

  • 问题内容: 我正在尝试使用j查询$ .ajax方法向我的php脚本发送多个数据,但是当我连接多个数据时我只能传递单个数据我的php脚本tat中出现未定义的索引错误,意味着发出了ajax请求,但没有数据发送,我需要知道如何格式化多个数据以依次将其发送到名称为vale对的处理脚本中,这是我写的 问题答案: 您可以创建一个键/值对的对象,jQuery将为您完成其余工作: 这样,数据将被自动正确编码。如果

  • 问题内容: 所以我一直在使用node.js(Js客户端和Android客户端)中的socket.io发送二进制数据时遇到麻烦。 没有太多信息,也没有: http://socket.io/blog/introducing-socket- io-1-0/ http://socket.io/get-started/chat/ 我需要使用套接字io发送我创建并填充的二进制数组。 他们给出的唯一代码如下: