小言_互联网的博客

【SpringCloud04】订单-支付微服务模块(消费者订单模块)

291人阅读  评论(0)

1.建cloud-consumer-order80

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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.atguigu.springcloud</groupId>
        <artifactId>cloud2022</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>cloud-consumer-order80</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

 

3.写yml

server:
  port: 80

4.主启动

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 简要描述
 *
 * @Author: ASuLe
 * @Date: 2023/1/11 20:17
 * @Version: 1.0
 * @Description: 文件作用详细描述....
 */
@SpringBootApplication
public class OrderMain80 {
   
    public static void main(String[] args) {
   
        SpringApplication.run(OrderMain80.class,args);
    }
}

 

5.业务类

问题1: 客户端是否需要controller层、service层、dao层吗?
回答: 不需要,只需要controller。
原因: 消费者调用8001提供者,提供服务的是8001,类似于同学不懂Java才找老师学习Java,这里老师就是教学服务的提供者,所以只应该有个controller,至于service和dao,不可能,因为你不可能操作提供者的数据库。

问题2: 但是order80和payment8001是不同的服务,该怎么调用呢?
解决1: 最原始web阶段使用HttpClient
解决2: 现在用restTemplate

5.1entities

主实体类Payment,Json封装体CommonResult类可直接复制

5.2RestTemplate

RestTemplate是什么

RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集

RestTemplate官网及使用

RestTemplate官网地址
使用:
使用RestTemplate非常简单

  • url:REST请求地址
  • requestMap:请求参数
  • ResponseBean.class:HTTP响应转换被转换成的对象类型

5.3config配置类

位置

package com.atguigu.springcloud.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * 简要描述
 *
 * @Author: ASuLe
 * @Date: 2023/1/11 20:34
 * @Version: 1.0
 * @Description: 文件作用详细描述....
 */
@Configuration
public class ApplicationContextConfig {
   

    //@Bean相当于applicationContext.xml <bean id="" class=""/>
    @Bean
    public RestTemplate getRestTemplate(){
   
        return new RestTemplate();
    }

}


 

5.4controller

package com.atguigu.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;

/**
 * 简要描述
 *
 * @Author: ASuLe
 * @Date: 2023/1/11 20:23
 * @Version: 1.0
 * @Description: 文件作用详细描述....
 */
@RestController
@Slf4j
public class OrderController {
   

    public static final String PAYMENT_URL = "http://localhost:8001";

    @Resource
    private RestTemplate restTemplate;

    //这里是客户端都是发送GetMapping请求
    @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);
    }


}


 

service服务控制台

6.测试

6.1测试查询

查询成功

6.2测试插入

看似插入成功,真的是这样吗?
如下图所示,插入的数据有主键,但是无内容


不要忘记@RequestBody注解

再次尝试插入


数据库中含有数据,插入成功


转载:https://blog.csdn.net/qq_45291280/article/details/128650256
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场