提问人:user1209216 提问时间:10/21/2015 最后编辑:Thilina Sampathuser1209216 更新时间:9/7/2017 访问量:88161
Spring/RestTemplate - 将实体放到服务器
Spring/RestTemplate - PUT entity to server
问:
请看这个简单的代码:
final String url = String.format("%s/api/shop", Global.webserviceUrl);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpHeaders headers = new HttpHeaders();
headers.set("X-TP-DeviceID", Global.deviceID);
HttpEntity entity = new HttpEntity(headers);
HttpEntity<Shop[]> response = restTemplate.exchange(url, HttpMethod.GET, entity, Shop[].class);
shops = response.getBody();
如您所见,上面的代码旨在从服务器获取商店列表(json 格式)并将响应映射到 Shop 对象数组。 现在我需要 PUT new shop,例如 /api/shop/1。请求实体的格式应与返回的实体完全相同。
我是否应该将 /1 添加到我的 url,创建新的 Shop 类对象,所有字段都填充了我想要放置的值,然后使用 HttpMethod.PUT 进行交换?
请为我澄清一下,我是 Spring 的初学者。代码示例将不胜感激。
[编辑] 我感到困惑,因为我刚刚注意到 RestTemplate.put() 方法。那么,我应该使用哪一个呢?交换还是放()?
答:
40赞
cpd214
10/21/2015
#1
您可以尝试以下操作:
final String url = String.format("%s/api/shop/{id}", Global.webserviceUrl);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpHeaders headers = new HttpHeaders();
headers.set("X-TP-DeviceID", Global.deviceID);
Shop shop= new Shop();
Map<String, String> param = new HashMap<String, String>();
param.put("id","10")
HttpEntity<Shop> requestEntity = new HttpEntity<Shop>(shop, headers);
HttpEntity<Shop[]> response = restTemplate.exchange(url, HttpMethod.PUT, requestEntity, Shop[].class, param);
shops = response.getBody();
看跌期权返回无效 虽然 Exchange 会给你一个响应,但最好的检查地点是文档 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html
评论
0赞
user1209216
10/21/2015
我假设我应该使用 requestEntity 而不是 entity 作为交换参数?另外,为什么 id 是 hasmap,您的意思是可能的多个 url 参数吗?
1赞
cpd214
10/21/2015
是的,它用于多个 URL 参数。我认为有一个不需要map的重载版本,您可以直接传递url参数以及查询参数(如果需要)。使用 requestEntity 而不是 entity 更新了答案。
0赞
Szilárd Németh
8/31/2017
很好的答案!我知道这是一件小事,但请更正这一行:param.put(“id”,“10”),因为这与简单的引号字符不同,我只是将代码复制到编辑器中,它揭示了这些字符是不同的。
0赞
devinvestidor
6/18/2021
谢谢兄弟!我不知道,因为在 RestTemplateHelper 中有 postEntity、getEntity 和 patchEntity,并且确实有 putEntity 🤷🏽 ♂️
评论