Technology 6/6/2021
207
0
2

Spring RestTemplate模版用法

spring , template , post , get , delete , put , resttemplate
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)

Comments