web-dev-qa-db-ja.com

Spring / RestTemplate-サーバーへのPUTエンティティ

次の簡単なコードをご覧ください。

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オブジェクトの配列にマップすることを目的としています。次に、たとえば/ api/shop/1のように、新しいショップをPUTする必要があります。リクエストエンティティは、返されたものとまったく同じ形式である必要があります。

/ 1をURLに追加し、新しいShopクラスオブジェクトを作成します。すべてのフィールドに値を入力し、HttpMethod.PUTとの交換を使用しますか?

私のために明確にしてください、私は春の初心者です。コード例をいただければ幸いです。

[編集] RestTemplate.put()メソッドにも気付いたので、私は二重に混乱しています。それで、どれを使うべきですか?交換またはput()?

13
user1209216

次のようなものを試すことができます:

    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();

putはvoidを返しますが、交換は応答を受け取るため、チェックするのに最適な場所はドキュメントです https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/ client/RestTemplate.html

22
cpd214