web-dev-qa-db-de.com

Spring / RestTemplate - PUT-Entität zum Server

Bitte schauen Sie sich diesen einfachen Code an:

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

Wie Sie sehen können, dient der obige Code zum Abrufen einer Liste von Shops vom Server (im JSON-Format) und zum Zuordnen der Antwort auf ein Array von Shop-Objekten. Jetzt muss ich einen neuen Shop anlegen, zum Beispiel als/api/shop/1. Die Anforderungsentität sollte genau dasselbe Format haben wie das zurückgegebene.

Soll ich meiner URL/1 hinzufügen, ein neues Shop-Klassenobjekt erstellen und alle Felder mit meinen Werten füllen, die ich einfügen möchte, und dann den Austausch mit HttpMethod.PUT verwenden?

Bitte klären Sie es für mich, ich bin Anfänger mit Frühling. Codebeispiel würde geschätzt.

[edit] Ich bin doppelt verwirrt, weil mir gerade auch die Methode RestTemplate.put () aufgefallen ist. Also, welches sollte ich verwenden? Tauschen oder setzen ()?

13
user1209216

Sie könnten versuchen, etwas wie:

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

die Put-Retoure ist ungültig, während der Austausch Ihnen eine Antwort geben würde. Am besten überprüfen Sie die Dokumentation https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/). client/RestTemplate.html

22
cpd214