2015-10-20 6 views
9

Betrachten Sie bitte diesen einfachen Code:Frühjahr/RestTemplate - PUT Einheit 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(); 

Wie Sie sehen können, über Code soll Liste der Geschäfte von Server erhalten (im JSON-Format) und Anfahrtsplan als Reaktion auf Reihe von Shop-Objekten. Jetzt muss ich einen neuen Shop putten, zum Beispiel als/api/shop/1. Request-Entity sollte genau das gleiche Format haben wie das zurückgegebene.

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

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

[bearbeiten] Ich bin doppelt verwirrt, weil ich gerade auch Methode RestTemplate.put() bemerkt habe. Also, welchen sollte ich benutzen? Tauschen oder setzen()?

Antwort

15

Sie könnten versuchen, so 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-Renditen nichtig während Austausch Sie eine Antwort erhalten würde, die beste Wahl wäre zu prüfen, Dokumentation sein https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

+0

Ich nehme an, ich requestEntity statt Einheit verwenden soll als Austauschparameter? Auch, warum ID ist hasmap, meinst du mögliche mehrere URL-Parameter? – user1209216

+1

ja, es ist für mehrere URL-Parameter. Ich denke, dass es eine überladene Version gibt, die keine Karte benötigt. Sie könnten den URL-Parameter sowie den Abfrageparameter (falls erforderlich) direkt übergeben. Die Antwort wurde mit requestEntity anstelle von entity aktualisiert. – cpd214

+0

Große Antwort! Ich weiß, es ist ein kleines Ding, aber bitte korrigieren Sie diese Zeile: param.put ("id", "10") da dies anders ist als einfache Zitat Zeichen, habe ich nur den Code in einen Editor kopiert und es enthüllt diese Zeichen sind unterschiedlich . –