irpas技术客

【springcloud合集】05:新建消费者下单模块&工程重构_公号:一条coding

网络投稿 7383

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

痴迷技术,热爱分享。个人微信公众号【一条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://·/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://·/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,需要源码和指导请在评论区说明。

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #收藏关注方便观看后续更新 #痴迷技术热爱分享 #不关注你一定会后悔