天天看点

5.0、springcloud-Rest学习环境搭建:服务消费者

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 这些参数的位置有点不同