- GET请求
有两种实现方式:- getForEntity函数。该方法返回的是ResponseEntity,该对象是Spring对HTTP请求响应的封装,其中主要出错了HTTP的几个重要元素,比如HTTP请求状态码的枚举对象HttpStatus(也就是常报错的404、500等错误码)、在它的父类HttpEntity中还存储在HTTP请求的头信息对象HttpHeaders以及泛型类型的请求体对象。getForEntity函数提供了三种不同的重载实现:
- getForEntity(String url, Class responseType, Object… uriVariables):
url:请求的地址;
responseType:请求响应体body的封装类型;
uriVariables:为url中的参数绑定。GET请求的参数绑定通常使用url中拼接的方式,如:restTemplate.getForEntity(“http://wistore/hi?name={1}” , String.class,“name”),其它第三个参数name会替代url中的占位符{1},uriVariables参数是一个数组,参数的顺序对应url中占位符定义的数字顺序。 - getForEntity(String url, Class responseType, Map<String, ?> uriVariables):
该方法和上个重载方法的唯一区别在于第三个参数,此处采用的占位符方式为restTemplate.getForEntity(“http://wistore/hi?name={name}” , String.class,uriVariables),{name}占位符中定义的name键名与uriVariables中定义的key一致。 - getForEntity(URI url, Class responseType):
该方法使用URI对象来替代之前的url和uriVariables参数来指定访问地址和参数绑定。URI是JDK java.net报下的一个类,它表示一个统一资源标识符引用。如:
restTemplate.getForEntity(UriComponentsBuilder.fromUriString(“http://query?name={1}”).build().expand(“name”).encode().toUri(), String.class).getBody()
-getForObject函数。该方法可以理解为对getForEntity的进一步封装,它通过HttpMessageConverterExtractor对HTTP的请求响应体body的内容进行对象转换,实现请求直接返回包装类型。当不需要关注请求响应body外的其他内容时,该函数就非常好用,可以少一个从Response中获取body的步骤。它与getForEntity函数类似,也提供了三种不同的重载实现: - getForObject(String url, Class responseType, Object… uriVariables)
- getForObject(String url, Class responseType, Map<String, ?> uriVariables)
- getForObject(URI url, Class responseType)
入参方式与getForEntity函数一致,这里就不重复介绍了。
- getForEntity(String url, Class responseType, Object… uriVariables):
- getForEntity函数。该方法返回的是ResponseEntity,该对象是Spring对HTTP请求响应的封装,其中主要出错了HTTP的几个重要元素,比如HTTP请求状态码的枚举对象HttpStatus(也就是常报错的404、500等错误码)、在它的父类HttpEntity中还存储在HTTP请求的头信息对象HttpHeaders以及泛型类型的请求体对象。getForEntity函数提供了三种不同的重载实现:
- POST请求
有三种实现方式:-
postForEntity函数。改方法同GET请求中getForEntity类似,会在调用后返回ResponseEntity<T>对象,其中T为请求响应的body类型。实现了三种重载方法:
- postForEntity(String url, @Nullable Object request, Class responseType, Object… uriVariables)
- postForEntity(String url, @Nullable Object request, Class responseType, Map<String, ?> uriVariables)
- postForEntity(URI url, @Nullable Object request, Class responseType)
这些函数中的参数用法大部分与getForEntity一致,比如,第一个重载函数和第二个重载函数中的uriVariables参数都用来对url中的参数进行绑定使用;responseType参数是对请求响应的body内容的类型定义。新增的request参数,该参数可以是一个普通对象,也可以是一个HttpEntity对象。如果是一个普通对象,而非HttpEntity对象的时候,RestTemplate会将请求对象转换为一个HttpEntity对象来处理,其中Object就是request的类型,request内容会被视作完整的body来处理;而如果request是一个HttpEntity对象,那么就会被当作一个完整的HTTP请求对象来处理,这个request中不仅包含了body的内容,也包含了header的内容。
-
postForObject函数。该函数也跟getForObject的类型类似,它的作用是简化postForEntity的后续处理。通过直接将请求响应的body内容封装成对象来返回适用,postForObject实现了三种重载方法:
- postForObject(String url, @Nullable Object request, Class responseType, Object… uriVariables)
- postForObject(String url, @Nullable Object request, Class responseType, Map<String, ?> uriVariables)
- postForObject(URI url, @Nullable Object request, Class responseType)
这三个函数除了返回的对象类型不同,函数的传入参数均与postForEntity一致。
-
postForLocation函数。该方法实现了已POST请求提交资源,并返回新资源的URI,实现了三种不同的重载方法:
- URI postForLocation(String url, @Nullable Object request, Object… uriVariables)
- URI postForLocation(String url, @Nullable Object request, Map<String, ?> uriVariables)
- URI postForLocation(URI url, @Nullable Object request)
由于postForLocation函数会返回新资源的URI,改URI就相当于指定了返回类型,所有此方法实现了POST请求不需要向前两个重载方法那样指定responseType。其它的参数用法相同。
-
- PUT请求
put函数为void返回,因此没有像其它函数的responseType参数,其它基本一致- void put(String url, @Nullable Object request, Object… uriVariables)
- void put(String url, @Nullable Object request, Map<String, ?> uriVariables)
- void put(URI url, @Nullable Object request)
- DELETE请求
- void delete(String url, Object… uriVariables)
- void delete(String url, Map<String, ?> uriVariables)
- void delete(URI url)
RestTemplate详解
最新推荐文章于 2025-04-11 10:44:23 发布