2015-10-20 13 views
9

Si prega di guardare a questo semplice codice:Primavera/RestTemplate - entità PUT al 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(); 

Come si può vedere, al di sopra del codice ha lo scopo di ottenere l'elenco dei negozi dal server (in formato JSON) e mappare risposta alla array di oggetti Shop. Ora ho bisogno di mettere un nuovo negozio, ad esempio come/api/shop/1. L'entità richiesta deve avere esattamente lo stesso formato di quello restituito.

Devo aggiungere/1 al mio url, creare un nuovo oggetto di classe Shop, con tutti i campi riempiti con i miei valori che voglio inserire e quindi utilizzare lo scambio con HttpMethod.PUT?

Per favore, chiariscimi per me, sono principiante con Spring. L'esempio di codice sarebbe apprezzato.

[modifica] Sono doppiamente confuso, perché ho appena notato anche il metodo RestTemplate.put(). Quindi, quale dovrei usare? Scambio o put()?

risposta

15

Si potrebbe provare qualcosa di simile:

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

la put restituisce void, mentre lo scambio otterrebbe una risposta, il posto migliore per controllare sarebbe documentazione https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

+0

Suppongo dovrei usare requestEntity invece di un'entità come parametro di scambio? Inoltre, perché id è hasmap, vuoi dire possibili parametri multipli di url? – user1209216

+1

sì, è per più parametri url. Penso che ci sia una versione sovraccaricata che non richiede la mappa, potresti passare direttamente il parametro url così come il parametro di query (se necessario). ha aggiornato la risposta con requestEntity anziché entità. – cpd214

+0

Ottima risposta! So che è un problema minore, ma per favore correggi questa riga: param.put ("id", "10") poiché questo è diverso dai semplici caratteri di citazione, ho appena copiato il codice in un editor e ho rivelato che quei caratteri sono diversi . –