001-springcloud-base工程创建

news2024/11/15 15:40:28

文章目录

  • 前言
    • SpringCloud与SpringBoot 对应版本
    • SpringCloud与SpringCloudAlibaba对应版本
    • 官方文档
  • 1 新建Project和Maven父工程
    • 1.1 Maven父工程步骤
      • 1.1.1 New Project
      • 1.1.2 聚合总父工程名字
      • 1.1.3 字符编码
      • 1.1.4 注解生效激活
      • 1.1.5 java编译版本选择JDK17
    • 1.2 父工程POM文件
    • 1.3 Maven工程落地细节
    • 1.4 mysql驱动说明
      • 1.4.1 mysql5版本
      • 1.4.2 mysql8版本
  • 2 mapper一键生成
    • 2.1 本次使用Mapper4
    • 2.2 SQL
    • 2.3 Module
    • 2.4 POM
    • 2.5 配置
      • 2.5.1 config.properties
        • 2.5.1.1 mysql5版本
        • 2.5.1.2 mysql8版本
      • 2.5.2 generatorConfig.xml
    • 2.6 一键生成
  • 3 Rest通用Base工程构建
    • 3.1 cloud-provider-payment8001 微服务提供者支付Module
      • 3.1.1 创建module
      • 3.1.2 改POM
      • 3.1.2 写YML
      • 3.1.3 主启动类
      • 3.1.4 业务类
        • 3.1.4.1 entities
        • 3.1.4.2 mapper
        • 3.1.1.4.3 serivce
        • 3.1.4.4 controller
        • 3.1.4.5 Swagger3
          • 3.1.1.4.5.1 简单实用说明
        • 3.1.4.6 统一返回格式
        • 3.1.4.7 全局异常处理

前言

本章节项目地址:
通过百度网盘分享的文件:cloud2024-项目初创完成.7z
链接:https://pan.baidu.com/s/1IWK2JDzQquqssfhAaXXlpg
提取码:msr2

SpringCloud与SpringBoot 对应版本

参考:https://spring.io/projects/spring-cloud
在这里插入图片描述

SpringCloud与SpringCloudAlibaba对应版本

参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
在这里插入图片描述

官方文档

Spring Cloud中文文档:https://www.bookstack.cn/read/spring-cloud-docs/docs-index.md
alibaba官方文档:https://spring-cloud-alibaba-group.github.io/zh-cn/
SpringBoot官网:https://spring.io/projects/spring-boot#learn

1 新建Project和Maven父工程

1.1 Maven父工程步骤

1.1.1 New Project

在这里插入图片描述

1.1.2 聚合总父工程名字

在这里插入图片描述

1.1.3 字符编码

在这里插入图片描述

1.1.4 注解生效激活

在这里插入图片描述

1.1.5 java编译版本选择JDK17

在这里插入图片描述

1.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>

    <groupId>com.msr.cloud</groupId>
    <artifactId>cloud2024</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <hutool.version>5.8.22</hutool.version>
        <lombok.version>1.18.26</lombok.version>
        <druid.version>1.1.20</druid.version>
        <mybatis.springboot.version>3.0.2</mybatis.springboot.version>
        <mysql.version>8.0.11</mysql.version>
        <swagger3.version>2.2.0</swagger3.version>
        <mapper.version>4.2.3</mapper.version>
        <fastjson2.version>2.0.40</fastjson2.version>
        <persistence-api.version>1.0.2</persistence-api.version>
        <spring.boot.test.version>3.1.5</spring.boot.test.version>
        <spring.boot.version>3.2.0</spring.boot.version>
        <spring.cloud.version>2023.0.0</spring.cloud.version>
        <spring.cloud.alibaba.version>2022.0.0.0-RC2</spring.cloud.alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--springboot 3.2.0-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springcloud 2023.0.0-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springcloud alibaba 2022.0.0.0-RC2-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringBoot集成mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.springboot.version}</version>
            </dependency>
            <!--Mysql数据库驱动8 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--SpringBoot集成druid连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!--通用Mapper4之tk.mybatis-->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper</artifactId>
                <version>${mapper.version}</version>
            </dependency>
            <!--persistence 数据持久化-->
            <dependency>
                <groupId>javax.persistence</groupId>
                <artifactId>persistence-api</artifactId>
                <version>${persistence-api.version}</version>
            </dependency>
            <!-- fastjson2 -->
            <dependency>
                <groupId>com.alibaba.fastjson2</groupId>
                <artifactId>fastjson2</artifactId>
                <version>${fastjson2.version}</version>
            </dependency>
            <!-- swagger3 调用方式 http://你的主机IP地址:5555/swagger-ui/index.html -->
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
                <version>${swagger3.version}</version>
            </dependency>
            <!--hutool-->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <optional>true</optional>
            </dependency>
            <!-- spring-boot-starter-test -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${spring.boot.test.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

1.3 Maven工程落地细节

dependencyManagement

Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。

通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。

使用pom.xml 中的dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement 元素的项目,然后它就会使用这个dependencyManagement 元素中指定的版本号。
在这里插入图片描述
这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,优势:

  1. 这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改;
  2. 另外如果某个子项目需要另外的一个版本,只需要声明version就可。

dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。

如果不在子项目中声明依赖,是不会从父项目中继承下来的,只有在子项目中写了该依赖项并且没有指定具体版本,才会从父项目中继承该项 且version和scope都读取自父pom;

如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

1.4 mysql驱动说明

1.4.1 mysql5版本

# mysql5.7---JDBC四件套
jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/db2024?useUnicode=true&characterEncoding=UTF-8&useSSL=false
jdbc.user = root
jdbc.password =123456
 
# Maven的POM文件处理
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

1.4.2 mysql8版本

# mysql8.0---JDBC四件套
jdbc.driverClass = com.mysql.cj.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
jdbc.user = root
jdbc.password =123456

# Maven的POM
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>

2 mapper一键生成

2.1 本次使用Mapper4

官网:https://github.com/abel533/Mapper

2.2 SQL

准备t_pay表

DROP TABLE IF EXISTS `t_pay`;

CREATE TABLE `t_pay` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `pay_no` VARCHAR(50) NOT NULL COMMENT '支付流水号',
  `order_no` VARCHAR(50) NOT NULL COMMENT '订单流水号',
  `user_id` INT(10) DEFAULT '1' COMMENT '用户账号ID',
  `amount` DECIMAL(8,2) NOT NULL DEFAULT '9.9' COMMENT '交易金额',
  `deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='支付交易表';

INSERT INTO t_pay(pay_no,order_no) VALUES('pay17203699','6544bafb424a');

SELECT * FROM t_pay;

2.3 Module

准备模块:mybatis_generator2024
在这里插入图片描述

2.4 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.msr.cloud</groupId>
        <artifactId>cloud2024</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>mybatis_generator2024</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--Mybatis 通用mapper tk单独使用,自己独有+自带版本号-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
        <!-- Mybatis Generator 自己独有+自带版本号-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.2</version>
        </dependency>
        <!--通用Mapper-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
        </dependency>
        <!--mysql8.0-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--persistence-->
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
        </dependency>
        <!--hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>
        <!--lombok-->
        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>${basedir}/src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.2</version>
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.33</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.2.3</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>

2.5 配置

2.5.1 config.properties

src\main\resources路径下新建config.properties

2.5.1.1 mysql5版本
#t_pay表包名
package.name=com.msr.cloud

# mysql5.7
#jdbc.driverClass = com.mysql.jdbc.Driver
#jdbc.url= jdbc:mysql://localhost:3306/db2024?useUnicode=true&characterEncoding=UTF-8&useSSL=false
#jdbc.user = root
#jdbc.password =123456
2.5.1.2 mysql8版本
#t_pay表包名
package.name=com.msr.cloud

# mysql8.0
jdbc.driverClass = com.mysql.cj.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
jdbc.user = root
jdbc.password =123456

2.5.2 generatorConfig.xml

src\main\resources路径下新建generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <properties resource="config.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
            <property name="caseSensitive" value="true"/>
        </plugin>

        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.user}"
                        password="${jdbc.password}">
        </jdbcConnection>

        <javaModelGenerator targetPackage="${package.name}.entities" targetProject="src/main/java"/>

        <sqlMapGenerator targetPackage="${package.name}.mapper" targetProject="src/main/java"/>

        <javaClientGenerator targetPackage="${package.name}.mapper" targetProject="src/main/java" type="XMLMAPPER"/>

        <table tableName="t_pay" domainObjectName="Pay">
            <generatedKey column="id" sqlStatement="JDBC"/>
        </table>
    </context>
</generatorConfiguration>

2.6 一键生成

双击mybatis-generator:gererate
在这里插入图片描述

3 Rest通用Base工程构建

3.1 cloud-provider-payment8001 微服务提供者支付Module

3.1.1 创建module

cloud-provider-payment8001
在这里插入图片描述

3.1.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.msr.cloud</groupId>
        <artifactId>cloud2024</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>cloud-provider-payment8001</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--SpringBoot通用依赖模块-->
        <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>
        <!--SpringBoot集成druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
        </dependency>
        <!-- Swagger3 调用方式 http://你的主机IP地址:5555/swagger-ui/index.html -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
        </dependency>
        <!--mybatis和springboot整合-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!--Mysql数据库驱动8 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--persistence-->
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
        </dependency>
        <!--通用Mapper4-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
        </dependency>
        <!--hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>
        <!-- fastjson2 -->
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
            <scope>provided</scope>
        </dependency>
        <!--test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.1.2 写YML

application.yml
在这里插入图片描述

server:
  port: 8001

# ==========applicationName + druid-mysql8 driver===================
spring:
  application:
    name: cloud-payment-service

  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
    username: root
    password: root

# ========================mybatis===================
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.msr.cloud.entities
  configuration:
    map-underscore-to-camel-case: true

3.1.3 主启动类

在这里插入图片描述

package com.msr.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("com.msr.cloud.mapper") //import tk.mybatis.spring.annotation.MapperScan;
public class Main8001 {
    public static void main(String[] args) {
        SpringApplication.run(Main8001.class,args);
    }
}

3.1.4 业务类

将之前一键生成的代码直接拷贝进8001模块
在这里插入图片描述

3.1.4.1 entities

创建传递数值PayDTO

	private Integer id;
    //支付流水号
    private String payNo;
    //订单流水号
    private String orderNo;
    //用户账号ID
    private Integer userId;
    //交易金额
    private BigDecimal amount;

在这里插入图片描述

3.1.4.2 mapper

mapper接口是复制进来的

3.1.1.4.3 serivce

PayService

public interface PayService {
    public int add(Pay pay);
    public int delete(Integer id);
    public int update(Pay pay);
    public Pay getAByid(Integer id);
    public List<Pay> getAll();
}

PayServiceImpl

@Service
public class PayServiceImpl implements PayService{
    @Resource
    private PayMapper payMapper;
    @Override
    public int add(Pay pay) {
        return payMapper.insertSelective(pay);
    }

    @Override
    public int delete(Integer id) {
        return payMapper.deleteByPrimaryKey(id);
    }

    @Override
    public int update(Pay pay) {
        return payMapper.updateByPrimaryKeySelective(pay);
    }

    @Override
    public Pay getAByid(Integer id) {
        return payMapper.selectByPrimaryKey(id);
    }

    @Override
    public List<Pay> getAll() {
        return payMapper.selectAll();
    }
}
3.1.4.4 controller
@RestController
@Slf4j
public class PayController {
    @Resource
    private PayService payService;

    @PostMapping(value = "/pay/add")
    public String addPay(@RequestBody Pay pay){
        System.out.println(pay.toString());
        int i = payService.add(pay);
        return "成功插入记录,返回值:" + i;
    }
    @DeleteMapping(value ="/pay/del/{id}")
    public Integer deletePay(@PathVariable("id") Integer id){
        return payService.delete(id);
    }
    @PutMapping(value ="/pay/update")
    public String updatePay(@RequestBody PayDTO payDTO){
        Pay pay = new Pay();
        BeanUtils.copyProperties(payDTO,pay);
        int i = payService.update(pay);
        return "成功修改记录,返回值:" + i;
    }
    @GetMapping(value="/pay/get/{id}")
    public Pay getById(@PathVariable("id") Integer id){
    return payService.getAByid(id);
    }

    @GetMapping(value="/pay/getAll")
    public List<Pay> getAll(){
        return payService.getAll();
    }
}
3.1.4.5 Swagger3

访问地址:http://localhost:8001/swagger-ui/index.html

3.1.1.4.5.1 简单实用说明

@Tag
描述:用于给 API 分组,用途类似于为 API 文档添加标签。
可用于:方法、类、接口。
使用: @Tag(name = “支付微服务模块”,description = “支付CRUD”)

@Operation
描述:用于描述 API 的操作。
可用于:方法。
使用:@Operation(summary = “新增”,description = “新增支付流水方法,json串做参数”)

@Schema
描述:用于描述数据模型的属性。
可用于:方法、类、接口。
使用:@Schema(title = “支付交易表实体类”) , @Schema(title =“支付流水号”)

	<dependency>
        <groupId>org.springdoc</groupId>
		<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
	</dependency>

在这里插入图片描述

@Configuration
public class Swagger3 {
    @Bean
    public GroupedOpenApi PayApi()
    {
        return GroupedOpenApi.builder().group("支付微服务模块").pathsToMatch("/pay/**").build();
    }
    @Bean
    public GroupedOpenApi OtherApi()
    {
        return GroupedOpenApi.builder().group("其它微服务模块").pathsToMatch("/other/**", "/others").build();
    }
    /*@Bean
    public GroupedOpenApi CustomerApi()
    {
        return GroupedOpenApi.builder().group("客户微服务模块").pathsToMatch("/customer/**", "/customers").build();
    }*/

    @Bean
    public OpenAPI docsOpenApi()
    {
        return new OpenAPI()
                .info(new Info().title("cloud2024")
                        .description("通用设计rest")
                        .version("v1.0"))
                .externalDocs(new ExternalDocumentation()
                        .description("www.msr.com")
                        .url("https://yiyan.baidu.com/"));
    }
}
3.1.4.6 统一返回格式

枚举类: ReturnCodeEnum
返回类: ResultData

  • ReturnCodeEnum
@Getter
public enum ReturnCodeEnum {
    /**操作失败**/
    RC999("999","操作XXX失败"),
    /**操作成功**/
    RC200("200","success"),
    /**服务降级**/
    RC201("201","服务开启降级保护,请稍后再试!"),
    /**热点参数限流**/
    RC202("202","热点参数限流,请稍后再试!"),
    /**系统规则不满足**/
    RC203("203","系统规则不满足要求,请稍后再试!"),
    /**授权规则不通过**/
    RC204("204","授权规则不通过,请稍后再试!"),
    /**access_denied**/
    RC403("403","无访问权限,请联系管理员授予权限"),
    /**access_denied**/
    RC401("401","匿名用户访问无权限资源时的异常"),
    RC404("404","404页面找不到的异常"),
    /**服务异常**/
    RC500("500","系统异常,请稍后重试"),
    RC375("375","数学运算异常,请稍后重试"),

    INVALID_TOKEN("2001","访问令牌不合法"),
    ACCESS_DENIED("2003","没有权限访问该资源"),
    CLIENT_AUTHENTICATION_FAILED("1001","客户端认证失败"),
    USERNAME_OR_PASSWORD_ERROR("1002","用户名或密码错误"),
    BUSINESS_ERROR("1004","业务逻辑异常"),
    UNSUPPORTED_GRANT_TYPE("1003", "不支持的认证模式");


    private final String code;
    private final String message;
    ReturnCodeEnum(String code, String message) {
        this.code=code;
        this.message=message;
    }
    //传统版
    public static ReturnCodeEnum getReturnCodeNumberV1(String code){
        for (ReturnCodeEnum element : ReturnCodeEnum.values()) {
                if(element.getCode().equalsIgnoreCase(code)){
                    return element;
                }
        }
        return null;
    }
    //stream流式计算版
    public static ReturnCodeEnum getReturnCodeNumberV2(String code){
        return Arrays.stream(ReturnCodeEnum.values())
                .filter(x -> x.getCode().equalsIgnoreCase(code))
                .findFirst().orElse(null);
    }

//    public static void main(String[] args) {
//        System.out.println(getReturnCodeNumberV1("200"));
//        System.out.println(getReturnCodeNumberV1("200").getCode());
//        System.out.println(getReturnCodeNumberV1("200").getMessage());
//        System.out.println(getReturnCodeNumberV2("404"));
//        System.out.println(getReturnCodeNumberV2("404").getCode());
//        System.out.println(getReturnCodeNumberV2("404").getMessage());
//    }

}
  • ResultData
@Data
@Accessors(chain = true)
public class ResultData<T> {
    private String code;
    private String message;
    private T data;
    private long timestamp;

    public ResultData() {
        this.timestamp = System.currentTimeMillis();
    }
    public static <T> ResultData<T> success(T data){
        ResultData resultData = new ResultData<>();
        resultData.setCode(ReturnCodeEnum.RC200.getCode());
        resultData.setMessage(ReturnCodeEnum.RC200.getMessage());
        resultData.setData(data);
        return resultData;
    }

    public static <T> ResultData<T> fail(String code,String message){
        ResultData resultData = new ResultData<>();
        resultData.setCode(code);
        resultData.setMessage(message);
        resultData.setData(null);
        return resultData;
    }
}
3.1.4.7 全局异常处理

全局异常类: GlobalExceptionHandler

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResultData<String> exception(Exception e){
        System.out.println("####come in GlobalExceptionHandler");
        log.error("全局异常信息:{}",e.getMessage(),e);
        return ResultData.fail(ReturnCodeEnum.RC500.getCode(), e.getMessage());
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2067128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ViT笔记学习

1.VIT ViT原理讲解 ViT结合代码 1.3 ViT模型架构 我们先结合下面的动图来粗略地分析一下ViT的工作流程&#xff0c;如下&#xff1a; 将一张图片分成patches将patches铺平将铺平后的patches的线性映射到更低维的空间添加位置embedding编码信息将图像序列数据送入标准Transfor…

Lagent 自定义你的 Agent 智能体

环境配置 开发机选择 30% A100&#xff0c;镜像选择为 Cuda12.2-conda。 首先来为 Lagent 配置一个可用的环境。 # 创建环境 conda create -n agent_camp3 python3.10 -y # 激活环境 conda activate agent_camp3 # 安装 torch conda install pytorch2.1.2 torchvision0.16.2 …

迷雾大陆辅助:VMOS云手机助力新手入门!玩法机制大全!

在《迷雾大陆》的神秘世界中&#xff0c;玩家们总是面临着层层挑战&#xff0c;而使用VMOS云手机能够极大地提升你的游戏体验。VMOS云手机专门为《迷雾大陆》打造了定制版云手机&#xff0c;内置游戏安装包&#xff0c;玩家无需重新下载安装&#xff0c;直接畅玩。此外&#xf…

【labview美化】

1.关闭前面板按钮&#xff0c;只会关闭运行状态而不是关闭面板界面 修改前面板vi的界面&#xff0c;以及自定义 可调前面板运行时大小 添加一个时间进去&#xff0c;左上角每200ms进入一次超时分支&#xff0c;1是获取计算机当前时间&#xff0c;2是设置时间的显示格式

高性能计算应用优化之运行参数优化

程序运行时系统的各项配置一般是按照普适性原则&#xff0c;尽可能满足大多数场景下的需求&#xff0c;并未针对特定场景进行优化&#xff0c;这虽然能够提高环境的通用性&#xff0c;但限制了性能提高的空间。运行时参数可以根据用户的需求来调整程序的运行方式和资源分配&…

Java 4.2 - MySQL

MySQL 基础 关系型数据库 关系型数据库就是建立在关系模型上的数据库。关系模型描述了实体属性以及实体和实体之间的关系。 在关系型数据库中&#xff0c;我们的数据都被存放在了各种表中&#xff08;比如用户表&#xff09;&#xff0c;表中的每一行存放着一条数据。 常见…

QCheckBox 全部取消选中

当我有很多 QCheckBox 被选中后&#xff0c;如何批量全部取消勾选呐&#xff1f; 方法一&#xff1a;findChildren函数方法二&#xff1a;foreach循环效果展示&#xff1a; 方法一&#xff1a;findChildren函数 // 遍历所有 QCheckBox 并取消选中QList<QCheckBox*> check…

新冠期间,Raspberry Pi 400 在肯尼亚为2500名学生提供在线学习机会

学生需要设备进行远程学习&#xff0c;Raspberry Pi 400为他们提供了在线学习的机会。 当疫情来袭时&#xff0c;接受前线重要岗位培训的护理和助产专业学生不得不改用远程教学来完成部分学业&#xff0c;但许多人家里没有设备&#xff0c;无法访问在线资料。Wisenet 伸出援手&…

全面解读AI大模型:一文带你看懂发展脉络与未来走向!

引言 近年来&#xff0c;随着深度学习技术的迅猛发展&#xff0c;AI大模型已经成为人工智能领域的重要研究方向和热点话题。AI大模型&#xff0c;指的是拥有巨大参数规模和强大学习能力的神经网络模型&#xff0c;如BERT、GPT等&#xff0c;这些模型在自然语言处理、计算机视觉…

小区物业维修管理系统/小区居民报修系统

摘要 小区物业维修是物业公司的核心&#xff0c;是必不可少的一个部分。在物业公司的整个服务行业中&#xff0c;业主担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类小区物业维修管理系统也在不断改进。本课题所设计的小区物业维修管理系统&#xff0c;使用…

SD-WAN企业组网解决方案能解决企业的哪些问题?

SD-WAN企业组网解决方案在现代企业网络建设中具有重要意义&#xff0c;能够有效解决企业面临的多项挑战&#xff0c;下文将对此进行详细描述&#xff1a; 首先&#xff0c;SD-WAN技术在节省企业网络建设和运维成本方面表现突出。相比传统网络架构依赖大量专线和昂贵设备的方式&…

ACM模式下算法题输入输出攻略【C++】

文章目录 [TOC] 1. 核心代码模式与ACM模式1.1 ACM模式介绍1.2 注意事项 2. C常用的输入输出方法2.1 输入2.1.1 cin注意事项2.1.2 getline()注意事项2.1.3 getchar()注意事项 2.2 输出 3. 案例3.1 一维数组输入3.1.1 固定长度的一维数组3.1.2 不固定长度的一维数组 3.2 二维数组…

Java学习_19_方法引用及异常

文章目录 前言一、方法引用方法引用实例引用静态方法引用成员方法引用构造方法使用类名引用成员方法引用数组的构造方法综合练习 二、异常异常是什么异常的作用处理方案默认异常捕获异常 异常对象的常用方法抛出异常 总结 前言 博客仅记录个人学习进度和一些查缺补漏。 学习内…

使用ckplayer控制视频播放

目录 1、加载视频流 1.1、html模块 1.2、js模块 2、其他功能 2.1、缩放窗口 2.2、旋转窗口 2.3、卸载播放器 2.4、监听播放时间进度 2.5、定位播放 3、初始化属性说明 4、使用功能一览 ckplayer是一款在网页上播放视频的软件&#xff0c;基于javascript和css&#xf…

黑神话:悟空!爆了很多猴头! 借力,借智,借势(深度好文)——早读(逆天打工人爬取热门微信文章解读)

黑神话&#xff1a;悟空 怎么这么多猴头呢&#xff1f; 引言Python 代码第一篇 洞见 借力&#xff0c;借智&#xff0c;借势&#xff08;深度好文&#xff09;第二篇 股市风云结尾 引言 天哪 我昨天忘记发了 原因有二 一是比较忙 大家明白那种 3000块工资干2W的活的感觉吧 一开…

PyTorch使用------模型的定义和保存方法(带你讯速掌握构建线性回归,保存模型的方法!!!)

&#x1f43b; PyTorch使用合集&#xff1a; PyTorch使用------张量的创建和数值计算-CSDN博客 PyTorch使用------张量的类型转换&#xff0c;拼接操作&#xff0c;索引操作&#xff0c;形状操作-CSDN博客 目录 &#x1f354; 模型定义方法 &#x1f498; 使用PyTorch构建线性…

RISC-V vector(1) --- vector的引入与register说明

Vector相较于SIMD的优势 这两种实现方案&#xff0c;都是为了实现数据级并行性&#xff08;存在大量的数据可供程序同时计算&#xff09;&#xff1b; SIMD&#xff08;Single Instruction Multiple Data&#xff09; SIMD是将数据宽度和操作类型&#xff0c;都放在了指令中&a…

网络初识部分

1.网络 单机时代-局域网时代-广域网时代-移动互联网时代 局域网时代&#xff1a;通过路由器把几个电脑连接起来。 广域网时代&#xff1a;把更多的局域网连接到一起&#xff0c;构成的网络更庞大&#xff0c;可能已经覆盖了一个城市/国家/全世界。 2.什么是路由器&#xff…

关于武汉芯景科技有限公司的多协议收发芯片XJ526(第二篇RS422模式)开发指南(兼容SP526)

一、设置芯片为RS422模式 SP526 包含高度集成的串行收发器。SP526 提供 RS-232 &#xff08;V.28&#xff09;、RS-423 &#xff08;V.10&#xff09;、RS-422 &#xff08;V.11&#xff09; 和 RS-485 的硬件接口模式。接口模式选择通过两个控制引脚D0、D1完成。 我们将D0接…

【简历】25届青岛某一本JAVA简历:中厂不要强调算法,面试官听不懂

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 今天我们要看的是一位来自25届青岛某一本硕士同学的Java简历。 依旧是先判断自己要投什么层次的厂&#xff0c;也就是我们校招第一法则…