Spring Restful客户端 - RestTemplate示例

时间:2020-02-23 14:36:00  来源:igfitidea点击:

在本教程中,我们将看到如何使用Spring RestTemplate创建REST客户端。

我们已经看到了Spring Restful Web服务Crud示例。

我们使用邮递实用程序来演示所有HTTP方法,如Get,Post,Delete和Put,但如果要为RESTful客户端编写Java代码,则可以使用Spring RestTemplate。

我们可以始终使用Java的httpclient,但Spring RestTemplate提供了更多方法和选项,可以通过HTTP方法使用来消耗Spring Resful Web服务。

以下是Spring RestTemplate为每个HTTP方法提供的方法列表。

MethodSpring RestTemplate's method
GetgetForObject, getForEntity
PostpostForObject(String url, Object request, Class responseType, String… uriVariables)postForLocation(String url, Object request, String… urlVariables),
Putput(String url, Object request, String…urlVariables)
Deletedelete()
HeadheadForHeaders(String url, String… urlVariables)
OptionsoptionsForAllow(String url, String… urlVariables)

使用get的例子:

我们可以使用GetforoPject或者GetForent来调用HTTP Get方法。

Spring REST API代码GET方法:

@RequestMapping(value = "/country/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
 public Country getCountryById(@PathVariable int id) {
  return countryService.getCountry(id);
 }

Spring RestTemplate Get方法:

package org.igi.theitroad.client;
 
import org.igi.theitroad.bean.Country;
import org.springframework.web.client.RestTemplate;
/**
 * @author igi Mandliya
 */
public class SpringRestTemplateExample {
 
 public static void main(String args[]) {
 
  RestTemplate restTemplate = new RestTemplate();
  Country bhutan = restTemplate
    .getForObject("http://localhost:8080/SpringRestfulWebServicesCRUDExample/country/{id}", Country.class,2);
  System.out.println("Country Name:"+bhutan.getCountryName());
  System.out.println("Population:"+bhutan.getPopulation());  
 }
}

运行上面的代码时,我们将得到以下输出:

Country Name:Bhutan
Population:7000

使用post的例子:

我们可以使用PostForObject或者Postforlocation来调用post方法。

Spring REST API代码POST方法:

@RequestMapping(value = "/countries", method = RequestMethod.POST, headers = "Accept=application/json")
 public Country addCountry(@RequestBody Country country) {
  return countryService.addCountry(country);
 }

Spring RestTemplate Post方法:

package org.igi.theitroad.client;
 
import org.igi.theitroad.bean.Country;
import org.springframework.web.client.RestTemplate;
/**
 * @author igi Mandliya
 */
public class SpringRestTemplateExample {
 
 public static void main(String args[]) {
 
  RestTemplate restTemplate = new RestTemplate();
 
     final String uri = "http://localhost:8080/SpringRestfulWebServicesCRUDExample/countries";
  
     Country country = new Country();
     country.setCountryName("USA");
     country.setPopulation(4000);
  
     Country addedCountry = restTemplate.postForObject( uri, country, Country.class);
     System.out.println("Country added : " +addedCountry.getCountryName());   
 }
}

运行上面的代码时,我们将得到以下输出:

Country added : USA

说明:

我们可以使用put来调用HTTP PUT方法。

Spring Rest API代码PUT方法:

@RequestMapping(value = "/countries", method = RequestMethod.PUT, headers = "Accept=application/json")
 public Country updateCountry(@RequestBody Country country) {
  return countryService.updateCountry(country);
 }

Spring RestTemplate Put方法:

package org.igi.theitroad.client;
 
import java.util.HashMap;
import java.util.Map;
 
import org.igi.theitroad.bean.Country;
import org.springframework.web.client.RestTemplate;
/**
 * @author igi Mandliya
 */
public class SpringRestTemplateExample {
 
 public static void main(String args[]) {
 
      final String uriForPut = "http://localhost:8080/SpringRestfulWebServicesCRUDExample/countries";
        
      Country country = new Country();
      country.setId(2);
      country.setCountryName("Bhutan");
      country.setPopulation(10000);
    
      RestTemplate restTemplate = new RestTemplate();
      restTemplate.put ( uriForPut, country);  
 }
}

运行上面的代码时,不丹的人口将更新到10000。

删除示例:

我们可以使用删除来调用HTTP Delete方法。

Spring Rest API代码删除方法:

@RequestMapping(value = "/country/{id}", method = RequestMethod.DELETE, headers = "Accept=application/json")
 public void deleteCountry(@PathVariable("id") int id) {
  countryService.deleteCountry(id);
 
 }

Spring RestTemplate Delete方法:

package org.igi.theitroad.client;
 
import java.util.HashMap;
import java.util.Map;
 
import org.springframework.web.client.RestTemplate;
/**
 * @author igi Mandliya
 */
public class SpringRestTemplateExample {
 
 public static void main(String args[]) {
 
   final String uriForDelete = "http://localhost:8080/SpringRestfulWebServicesCRUDExample/country/{id}";
      
      Map<String, String> params = new HashMap<String, String>();
      params.put("id","2");
    
      RestTemplate restTemplate = new RestTemplate();
      restTemplate.delete ( uriForDelete,params);  
 }
}