servicios restful por parametros metodo enviar java resttemplate url-parameters query-parameters path-parameter

por - restful java



RestTemplate: Cómo enviar los parámetros de URL y consulta juntos (2)

Estoy intentando pasar los parámetros de ruta y de consulta en una URL, pero obtengo un error extraño. debajo está el código

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

y mi url se está convirtiendo en http://test.com/Services/rest/%7Bid%7D/Identifier?name=myName

¿Qué debo hacer para que funcione? Estoy esperando http://test.com/Services/rest/{id}/Identifier?name=myName para que params agregue id a la url

Por favor recomiende. gracias por adelantado


Un problema con la respuesta de Michal Foksa es que primero agrega los parámetros de consulta y luego expande las variables de ruta. Si el parámetro de consulta contiene paréntesis, por ejemplo, {foobar} , esto causará una excepción.

La forma segura es expandir primero las variables de ruta y luego agregar los parámetros de consulta:

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


Yo usaría buildAndExpand de UriComponentsBuilder para pasar todos los tipos de parámetros URI.

Por ejemplo:

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" */