17

Sto provando a passare il parametro path e i parametri di query in un URL ma sto ottenendo uno strano errore. al di sotto è il codiceRestTemplate: Come inviare URL e parametri di query insieme

String url = "http://test.com/Services/rest/{id}/Identifier" 
    Map<String, String> params = new HashMap<String, String>(); 
    params.put("id", "1234"); 
    UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url) 
             .queryParam("name", "myName"); 
    String uriBuilder = builder.build().encode().toUriString(); 
    restTemplate.exchange(uriBuilder , HttpMethod.PUT, requestEntity, 
        class_p, params); 

e il mio url sta diventando http://test.com/Services/rest/%7Bid%7D/Identifier?name=myName

cosa devo fare per farlo funzionare. Mi aspetto http://test.com/Services/rest/{id}/Identifier?name=myName in modo che i parametri aggiungeranno id all'URL

per favore suggerire. grazie in anticipo

risposta

51

Vorrei utilizzare buildAndExpand da UriComponentsBuilder per passare tutti i tipi di parametri URI.

Ad esempio:

String url = "http://test.com/solarSystem/planet/{planet}/moon/{moon}"; 

// URI (URL) parameters 
Map<String, String> uriParams = new HashMap<String, String>(); 
uriParams.put("planet", "Mars"); 
uriParams.put("moon", "Phobos"); 

// Query parameters 
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url) 
     // Add query parameter 
     .queryParam("firstName", "Mark") 
     .queryParam("lastName", "Watney"); 

System.out.println(builder.buildAndExpand(uriParams).toUri()); 
/** 
* Console output: 
* http://test.com/solarSystem/planet/Mars/moon/Phobos?firstName=Mark&lastName=Watney 
*/ 

restTemplate.exchange(builder.buildAndExpand(uriParams).toUri() , HttpMethod.PUT, 
     requestEntity, class_p); 

/** 
* Log entry: 
* org.springframework.web.client.RestTemplate Created PUT request for "http://test.com/solarSystem/planet/Mars/moon/Phobos?firstName=Mark&lastName=Watney" 
*/ 
+0

funziona benissimo. grazie Michal – Shiva

+0

Sono felice Shiva :) –