我有如下一段代码来调用我们的服务之一。
MultiValueMap<String, String> parametersMap = new LinkedMultiValueMap<>();
parametersMap.add("query", query);
parametersMap.add("locale", "en_US");
parametersMap.add("resultsLimit", Boolean.FALSE.toString());
parametersMap.add("maxResults", maxResults);
parametersMap.add("type", "TTT");
parametersMap.add("ids", commaSeparatedValues(ids));
parametersMap.add("infoTypes", "HHH,JJJ");
HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(parametersMap, getHttpHeaders());
MyEntity myEntity = restTemplate.postForEntity("http://example.com", httpEntity, MyEntity.class);
在服务器端,控制器代码就像
@RequestMapping("my/service")
public MyEntity suggest(@RequestParam(required = true) String query, @RequestParam(required = true) String locale,
@RequestParam(required = false) String resultsLimit, @Valid OtherOptions options)
和OtherOption类就像
class OtherOptions {
String maxResults;
String type;
String ids;
String infoTypes;
}
在这里一切正常,但是我对诸如之类的东西感到困惑。
是获取请求还是发布请求?
这是一个发帖请求。你在打电话
restTemplate.postForEntity
。但是您的服务器端方法不受限制,因为您没有指定method
属性,RequestMapping
因此同一方法可以从服务器角度处理任何http方法。
某些参数映射内容如何变成请求参数(查询参数),而另一些参数如何映射到OtherOptions的对象?
它们都不是查询参数。有关的含义,请参见spring docs
@RequestParam
。在您的情况下,它们全部来自正文,而不是作为查询参数实体的主体或请求本身可以是用于创建多部分请求的MultiValueMap。
请求的实际内容是哪一个?
parametersMap是http请求的正文。
注意:当前,您的呼叫应该会失败,因为您正在将呼叫发布到http://example.com
客户端并在服务器端进行监听my/service
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句