天天看點

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 這些參數的位置有點不同