当前位置 博文首页 > 一条IT:【springcloud合集】05:新建消费者下单模块&工程重

    一条IT:【springcloud合集】05:新建消费者下单模块&工程重

    作者:[db:作者] 时间:2021-08-13 15:48

    一个毕业后差一点进大厂的程序员的进阶之路——既为巩固知识,也为增长粉丝收藏+关注方便观看后续更新。

    痴迷技术,热爱分享。个人微信公众号【一条IT】,每天分享软件,资源,教程,福利。不关注你一定会后悔。

    目录

    新建下单moudle

    1.建moudle

    2.改pom

    3.写yml

    4.主启动

    5.业务类

    5.1entities

    5.2controller

    ?6.测试

    热部署

    1.增加依赖和maven插件

    2.开启idea自动编译

    ?工程重构

    1.新建cloud-api-commons

    2.pom

    3.复制实体类

    4.clean install

    补充1:maven如何固定在侧边栏

    补充2:取消idea文件折叠

    5.添加依赖?


    上期新建了服务提供者支付模块,那么有提供者就要有消费者,今天新建下单Moudle。

    新建下单moudle

    老五步,要牢记

    1.建moudle

    新建moudle和上次一样,不在赘述。名字为:cloud-consumer-order80? ?

    80作为端口号,因为默认是80,访问时可以省略,就像我们访问网站时都是不用端口号的,模拟用户下单过程。

    2.改pom

    用户是没有权限操作数据库的,所以该pom没有和数据库操作相关的依赖,yml里也不需要配置数据源。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>cloud2020</artifactId>
            <groupId>com.li.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>cloud-consumer-order80</artifactId>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web  -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
    </project>
     
    

    3.写yml

    server:
      port: 80
     
     
    

    4.主启动

    和之前无区别,自己练习写。名字:OrderMain80?

    5.业务类

    5.1entities

    直接复制payment8001

    5.2controller

    由于不需访问数据库,无service和dao层,更不用写mapper。用户下单后只需要跳转到支付页面,由payment去处理数据库,但是我们没有前端页面,就无法用@controller去找xxx.html,所以怎么处理背后的网页跳转是现在的问题,下面就介绍一个新的类 RestTemplate

    RestTemplate是什么?

    RestTemplate提供了多种便捷访问远程Http服务的方法,且符合restful,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute,能够大大提高客户端的编写效率。

    怎么用?

            //请求地址
            String url = "http://localhost:8080/testPost";
            //入参
            RequestBean requestBean = new RequestBean();
            requestBean.setTest1("1");
            requestBean.setTest2("2");
            requestBean.setTest3("3");
    
            RestTemplate restTemplate = new RestTemplate();
            ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);

    使用restTemplate访问restful接口非常的简单粗暴无脑(url, requestMap, ResponseBean.class)这三个参数分别代表 请求地址、请求参数、HTTP响应转换被转换成的对象类型。

    RestTemplate方法的名称遵循命名约定,第一部分指出正在调用什么HTTP方法,第二部分指示返回的内容。本例中调用了restTemplate.postForObject方法,post指调用了HTTP的post方法,Object指将HTTP响应转换为您选择的对象类型。还有其他很多类似的方法,可以参考官方api。

    在本项目的实际运用

    1.新建配置类 ApplicationContextConfig 在config包下

    package com.li.springcloud.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    @Configuration
    public class ApplicationContextConfig {
    
        @Bean
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    
    }
     
     
    

    2.controller调用

    package com.li.springcloud.controller;
    
    import com.atguigu.springcloud.entities.CommonResult;
    import com.atguigu.springcloud.entities.Payment;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    import javax.annotation.Resource;
    
    @RestController
    @Slf4j
    public class OrderController {
    
        public static final String PAYMENT_URL = "http://localhost:8001";
    
        @Resource
        private RestTemplate restTemplate;
    
        @GetMapping("/consumer/payment/create")
        public CommonResult<Payment>   create(Payment payment){
            return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);  //写操作
        }
    
        @GetMapping("/consumer/payment/get/{id}")
        public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
            return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
        }
    }
     
     
    

    ?6.测试

    热部署

    为了调试方便,在开发环境会开启热部署,生产环境会关掉

    1.增加依赖和maven插件

    要分开添加

    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    
    
    <build>
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <configuration>
            <fork>true</fork>
            <addResources>true</addResources>
          </configuration>
        </plugin>
      </plugins>
    </build>

    2.开启idea自动编译

    crtl+shirt+alt+/? 选第一个?

    ?工程重构

    将两个moudle都用到的实体类单独拿出来,通过添加依赖的方式引用

    1.新建cloud-api-commons

    2.pom

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>cloud2020</artifactId>
            <groupId>com.li.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>cloud-api-commons</artifactId>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
               <optional>true</optional>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.1.0</version>
            </dependency>
        </dependencies>
    
    </project>
     
    

    3.复制实体类

    在文件管理器里复制entities和commonResult,不要在idea复制,会重新计算索引,很慢

    4.clean install

    maven执行clean和install

    补充1:maven如何固定在侧边栏

    补充2:取消idea文件折叠

    5.添加依赖?

    先删除的80和8001各自的实体类,然后在pom添加依赖

    <dependency>
        <groupId>com.li.springcloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>${project.version}</version>
    </dependency>
     
    

    ?

    本期到这结束,下一期学习第一个组件Eureka,需要源码和指导请在评论区说明。

    ?

    cs
    下一篇:没有了