5.0、springcloud-Rest学习环境搭建:服务消费者
创建一个module,springcloud-consumer-dept-80,因为很多浏览器默认端口都是80
在pom.xml中导入相关依赖:
<dependency>
<groupId>com.hkl</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在application.yaml文件配置端口:
server:
port: 80
在config文件夹下创建一个ConfigBean.java配置类
为了能够直接调用RestTemplate封装好的方法,手动将它注入到容器中
package com.hkl.springcloud.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ConfigBean {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
在controller文件夹下创建一个DeptComsumerController.java:
package com.hkl.springcloud.controller;
import com.hkl.springcloud.pojo.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@RestController
public class DeptComsumerController {
//理解:消费者不应该有service层~
//RestTemplate ... 供我们直接调用就可以了 手动注册到Spring中
//(url,参数,返回类型)
@Autowired
private RestTemplate restTemplate;
private static final String REST_URL_PREFIX = "http://localhost:8001";
@RequestMapping("/consumer/dept/add")
public boolean add(Dept dept) {
return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add",dept,boolean.class);
}
@RequestMapping("/consumer/dept/get/{id}")
public Dept queryById(@PathVariable("id") Long id) {
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/{id}",Dept.class,id);
}
@RequestMapping("/consumer/dept/list")
public List<Dept> queryAll() {
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/add",List.class);
}
}
上述代码中,设置了一个 REST_URL_PREFIX 常量,因为可以发现访问的url前面这部分都是一样的
用 RestTemplate 调用的 postForObject 或者是 getForObject 方法去完成远程接口调用,就是在自己的模块里调用其他模块的方法.
RestTemplate 方法里面的参数就三个,分别是 url,参数,返回的类型 只是 post 和 get 这些参数的位置有点不同