学习Spring Cloud Ribbon 发送请求

首先在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 "删除成功";
		
	}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值