Spring/RestTemplate - PUT 实体到服务器

Posted

技术标签:

【中文标题】Spring/RestTemplate - PUT 实体到服务器【英文标题】:Spring/RestTemplate - PUT entity to server 【发布时间】:2016-01-19 10:27:30 【问题描述】:

请看这个简单的代码:

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 新商店,例如 /api/shop/1。请求实体应与返回的实体具有完全相同的格式。

我是否应该将 /1 添加到我的 url,创建新的 Shop 类对象,在所有字段中填充我想要放置的值,然后使用 HttpMethod.PUT 进行交换?

请为我澄清一下,我是 Spring 的初学者。代码示例将不胜感激。

[编辑] 我很困惑,因为我刚刚注意到方法 RestTemplate.put()。那么,我应该使用哪一个?交换还是 put()?

【问题讨论】:

您可能希望使用 POST 创建新对象,并使用 PUT 更新现有对象。 【参考方案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();

看跌期权返回无效,而交易所会给你一个响应,最好的检查位置是文档https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

【讨论】:

我假设我应该使用 requestEntity 而不是 entity 作为交换参数?还有,为什么id是hasmap,你的意思是可能有多个url参数吗? 是的,它用于多个 url 参数。我认为有一个不需要地图的重载版本,您可以直接传递 url 参数以及查询参数(如果需要)。用 requestEntity 而不是 entity 更新了答案。 很好的答案!我知道这是一件小事,但请更正这一行:param.put(“id”,”10”) 因为这与简单的引号字符不同,我只是将代码复制到编辑器中,结果显示这些字符是不同的。 谢谢兄弟!我不知道是因为在 RestTemplateHelper 中有 postEntity、getEntity 和 patchEntity 并且没有 putEntity ??‍♂️

以上是关于Spring/RestTemplate - PUT 实体到服务器的主要内容,如果未能解决你的问题,请参考以下文章

spring RestTemplate提交json格式数据

Spring Cloud Commons教程Spring RestTemplate作为负载平衡器客户端

Spring RestTemplate 之get请求

Spring RestTemplate作为负载平衡器客户端

Spring RestTemplate作为负载平衡器客户端

Spring RestTemplate作为负载平衡器客户端