首先在pom.xml中的文件中添加依赖,其中有Web依赖,Eureka依赖(服务的注册与发现),Ribbon依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
在启动类中添加如下代码(其中设置了超时时间):
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
SimpleClientHttpRequestFactory requestFactory = new
SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(2500);// 设置超时
requestFactory.setReadTimeout(2000);
return new RestTemplate(requestFactory);
}
@Bean:产生一个Bean的对象
@LoadBalanced:开启负载均衡
GET请求
第一种getForEntity函数,该方法返回的是ResponseEntity,该对象是字符串对HTTP请求响应的封装。
姓名,年龄两个参数对应的{1},{2}代表两个占位符,如要传递多个参数以此类推。
String.class返回值,如果需要返回对象对象的.class
getBody()是返回的ResponseEntity对象中的体内容。
/**
* Ribbon Get测试
* @return
*/
@RequestMapping(value="RibbonGet",method=RequestMethod.GET)
public String RibbonGet(@RequestParam("name") String name,@RequestParam("age") String age) {
return restTemplate.getForEntity("http://OrderService/GetTest?name={1}&age={2}", String.class,name,age).getBody();
}
也可以传地图集合
注意占位符名称
/**
* Ribbon Get测试
* @return
*/
@RequestMapping(value="RibbonGet",method=RequestMethod.GET)
public String RibbonGet(@RequestParam("name") String name,@RequestParam("age") String age) {
//传递Map集合
Map<String, Object> params=new HashMap<>();
params.put("name", name);
params.put("age", age);
return restTemplate.getForEntity("http://OrderService/GetTest?name={name}&age={age}", String.class,params).getBody();
}
第二种getForObject函数,该方法可以理解为对getForEntity的进一步封装,返回的直接就是身体,如果不需要关注请求响应除身体外,该函数就非常好用。
/**
* Ribbon Get测试
* @return
*/
@RequestMapping(value="RibbonGet",method=RequestMethod.GET)
public String RibbonGet(@RequestParam("name") String name,@RequestParam("age") String age) {
return restTemplate.getForObject("http://OrderService/GetTest?name="+name+"&age="+age, String.class);
}
POST请求
第一种postForEntity函数,该方法返回的是ResponseEntity <T>,其中Ť为请求响应的体类型。
/**
* Ribbon Post请求
* @param id
* @return
*/
@RequestMapping(value="ribbonPostOrder",method=RequestMethod.POST)
public User PostBeanTest(@RequestParam("id") Integer id) {
User user=new User();
user.setId(id);
ResponseEntity<User> entity = restTemplate.postForEntity("http://OrderService/PostBeanTest", user, User.class);
return entity.getBody();
}
第二种postForObject函数,和postForEntity类似,简化了机身的处理。
/**
* Ribbon Post请求
* @param id
* @return
*/
@RequestMapping(value="ribbonPostOrder",method=RequestMethod.POST)
public User PostBeanTest(@RequestParam("id") Integer id){
User user=new User();
user.setId(id);
return restTemplate.postForObject("http://OrderService/PostBeanTest", user, User.class);
}
PUT请求
把函数为无效类型,所以没有返回内容。
/**
* Ribbon Put请求
* @param id
* @return
*/
@RequestMapping(value="ribbonPutOrder",method=RequestMethod.POST)
public String ribbonPutOrder(@RequestParam("id") Integer id,@RequestParam("name") String name){
User user=new User();
user.setId(id);
user.setName(name);
restTemplate.put("http://OrderService/PutTest",user);
return "PUT成功!";
}
DELETE请求
deleet函数为无效类型,所以没有返回内容。
/**
* Ribbon Delete请求
* @param id
* @return
*/
@RequestMapping(value="ribbonDeleteOrder",method=RequestMethod.POST)
public String ribbonDeleteOrder(@RequestParam("id") Integer id) {
restTemplate.delete("http://OrderService/DeleteTest/?id={1}",id);
return "删除成功";
}