Spring RestTemplate模版用法
GET:
restTemplate 的 GET 调用:两种方式,getForEntity()、getForObject();
1. getForEntity() 函数:
该方法返回的是 ResponseEntity, 该对象是 Spring对 HTTP 请求响应的封装。
1.1 getForEntity(String url, Class responseType, Map urlVariables),使用该方法进行参数绑定时需要在占位符中指定 Map 中参数的 key 值。使用示例:
Map<String, Object> param = new HashMap<>(); param.put("name", "admin"); restTemplate.getForEntity("http://user-service/user/one?name={name}",String.class,param);
此方法调用后,"admin"会被替换为占位符{1}。
1.2 getForEntity(String url, Class responseType, Object ... urlVariables)
使用示例:restTemplate.getForEntity("http://user-service/user/one?name={1}",String.class,"admin");
此方法调用后,"admin"会被替换为占位符{1}。
1.3 getForEntity(Uri url, Class responseType)
使用示例:Uri uri = UriComponentBuilder.fromUriString("http://user-service/user/one?name={1}").build.expand("admin").encode().toUri(); restTemplate.getForEntity(uri,String.class).getBody();
2. getForObject() 函数:
该方法可以理解为对 getForEntity 的进一步封装,它通过 HttpMessageConverterExtractor 对 HTTP 的请求响应体 body 内容进行对象转换, 实现请求直接返回包装好的对象内容。也是同样重载了三个方法,与getForEntity()不同的时,在getForObject(Uri url, Class responseType)方法,不需要再调用getBody()方法。
POST:
restTemplate 的 POST 调用:两种方式,postForEntity()、postForObject()、postForLocation()
1. postForEntity() 函数和 postForObject()函数:
同GET方式类似,都是三种类型的方法重载,不同的是多了一个参数Object request:
postForEntity(String url, Object request, Class responseType, Object... uriVariables)
postForEntity(String url, Object request, Class responseType, Map uriVariables)
postForEntity(URI url, Object request, Class responseType)
注:postForObject()函数类似,不再赘述。需要注意的是新增加的 request参数, 该参数可以是一个普通对象, 也可以是一个HttpEntity对象。 如果是一个普通对象, 而非HttpEntity对象的时候, RestTemplate会将请求对象转换为一个HttpEntity对象来处理, 其中Object就是 request的类型, request内容会被视作完整的body来处理;而如果 request是一个HttpEntity对象, 那么就会被当作一个完成的HTTP请求对象来处理, 这个 request中不仅包含了body的内容, 也包含了 header的内容。使用示例:
ResponseEntity<String> response = restTemplate.postForEntity("http://user-service/user", user, String.class);
String body = response.getBody();
2. postForLocation()函数
该方法实现了以POST请求提交资源, 并返回新 资源的URI,另外相比较postForEntity()和postForObject(),少了一个参数Class responseType:
postForLocation(Stringurl, Object request, Object...urlVariables)
postForLocation(String url, Object request, Map urlVariables)
postForLocation(URI url, Object request)
使用示例;
URI uri = restTemplate.postForLocation("http://user-service/user", user);
PUT:
restTemplate 的 PUT 调用:put()函数,也是三种方式重载,与GET、POST方式不同的是,PUT没有返回值,所以没有Class responseType这个参数:
put(String url, Object request, Object... urlVariables)
put(String url, Object request, Map urlVariables)
put(URI url, Object request)
DELETE:
restTemplate 的 DELETE 调用:delete()函数,通常都将DELETE请求的唯一标识拼接在url中, 所 以DELETE请求也不需要request的body信息,DELETE请求方式和GET非常类似,唯一区别是没有返回值:
delete(String url, Object ... urlVariables)
delete(String url, Map urlVariables)
delete(URI url)