sábado, 19 de diciembre de 2009

RestTemplate en Spring 3

La clase RestTemplate es la principal clase de spring para acceso http del lado cliente. Conceptualmente es similar a JdbcTemplate, JmsTemplate y a otros templates proveídos por spring.
Los principales metodos del template tienen el nombre de los metodos Http:

HTTP RestTemplate

DELETE delete(String, String...)

GET getForObject(String, Class, String...)

HEAD headForHeaders(String, String...)

OPTIONS optionsForAllow(String, String...)

POST postForLocation(String, Object, String...)

PUT put(String, Object, String...)

Estos nombres indican claramente cuál de los métodos Http son invocados, mientras la segunda parte indica que devuelven los métodos. Por ejemplo getForObject() usa el método GET y transforma la respuesta HTTP en un objeto que decida. Como se puede apreciar los métodos se enfocan en las mejores prácticas REST.
Cada uno de los métodos tiene un parámetro de tipo string (el primero) este es la URI del método. Se puede pasar parámetros de dos formas una usando varargs:

String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, "42", "21");

Esto debería llamar a http://example.com/hotels/42/bookings/21 por el método GET.

También podemos usar mapas, por ejemplo:

Map vars = new HashMap();
vars.put("hotel", "42");
vars.put("booking", "21");
String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, vars);

Esto debería llamar a http://example.com/hotels/42/rooms/42 también por el método GET.

HttpMessageConverters se encarga de convertir los HTTP requests a los tipos que se indiquen.