暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

API调用工具之RestTemplate详解

代码小搬运 2019-11-26
1165

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函数一致,这里就不重复介绍了。

              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)


                                            文章转载自代码小搬运,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                            评论