当前位置: 首页 > news >正文

SpringCloud-创建项目

java 17+ cloud 2023.0.0 boot 3.2.0 cloud alibaba 2022.0.0.0-Rc2 maven 3.9+ mysql 8.0+

一、创建项目

  1. new project

  2. 聚合总父工程名字

  3. 字符编码

4.注解生效激活

5.java编译版本选17

6.file type 过滤

删除src

1.1maven中的dependencyManagerdependencies

一般在项目最顶层pom中看到dependencyManager能让所有在子项目中引用一个依赖而不显示的列出版本号,maven会沿着父子层次向上走,知道找到一个拥有dependencyManagement元素的项目,然后就会使用这个dependencyManagement元素中指定的版本号

好处:如果有多个子项目都引用一样依赖,则可以避免在每个使用的子项目里面都声明一个版本号

  1. 当想升级或切换另一个版本的时候,只需要在顶层父容器更新,而不需要一个一个修改子项目

  2. 如果某个子项目需要另外一个版本,只需要声明version就可。

1.2跳过单元测试配置

1.3创建子项目

步骤

  1. 建module

  2. 改pom

  3. 写yml

  4. 主启动

  5. 写业务

1.4Swagger3

  1. 1.加注解

注解标注位置作用
@Tagcontroller类标识controller作用
@Parameter参数标识参数作用
@Parameters参数参数多重说明
@Schemamodle层的javaBean描述魔性作用及每个属性
@Operation方法描述方法作用
@ApiRestponse方法描述响应状态码等

2.含分组迭代的Config配置类

package com.atguigu.cloud.config;

import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Swagger3Config
{
    @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.hhf.com")
                        .url("https://yiyan.baidu.com/"));
    }
}

3.调试方式

http://localhost:8001/swagger-ui/index.html

1.5优化

1.完善日期时间格式

可以在相应类的属性上面使用@JsonFormat注解

@Column(name = "create_time")
    @Schema(title = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createTime;

    @Column(name = "update_time")
    @Schema(title = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date updateTime;

如果是Spring Boot项目,也可以在application.yml文件中指定

spring:
	jackson:
		date-format:yyyy-MM-dd HH:mm:ss
		time-zone: GMT+8

2.统一返回值

思路:定义返回标准格式,3大标配

code状态值:由后端统一定义各种返回结果的状态码

message描述:本次接口调用的结果描述

data数据:本次返回的数据

扩展:接口调用时间之类,timestamp:接口调用时间

步骤:

1.新建枚举类ResturnCodeEnmu

HTTP请求返回状态码

ReturnCodeEnum

package com.atguigu.cloud.resp;

import lombok.Getter;

import java.util.Arrays;

@Getter
public enum ReturnCodeEnum {
    RC999("999","操作xxx失败"),
    RC200("200", "success"),
    RC201("201", "服务器开启降级保护,请稍后再试"),
    RC202("202", "热点参数限流,请稍后再试"),
    RC203("203", "系统规则不满足要求,请稍后再试"),
    RC204("204", "授权规则不通过,请稍后再试"),
    RC403("403", "无访问权限,请联系管理员授予权限"),
    RC401("401", "匿名用户访问无权限资源时的异常"),
    RC404("404", "404页面找不到的异常"),
    RC500("500", "系统异常请稍后再试"),
    RC375("375", "数学运算异常,请稍后再试"),
    INVALID_YOKEN("2001","访问令牌不合法"),
    ACCESS_DENIED("2003","没有权限访问该资源"),
    CLIENT_AUTHENTICATION_FAILED("1001","客户端认证失败"),
    USERNAME_OR_PASSWORD_ERROE("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;
    }

    /**
     * 如何定义一个通用的枚举类
     * 举值-构造-遍历
     */

    
    //传统版
    //3.1
    public static ReturnCodeEnum getReturnCodeEnum(String code){
        for (ReturnCodeEnum element : ReturnCodeEnum.values()) {
            if(element.getCode().equalsIgnoreCase(code)){
                return element;
            }
        }
        return  null;
    }
    
    //3.2Stream流式计算
    public static ReturnCodeEnum getReturnEnum1(String code){
        return Arrays.stream(ReturnCodeEnum.values()).filter(x -> x.getCode().equalsIgnoreCase(code)).findFirst().orElse(null);
    }   


}

2.新建统一定义返回对象ResultData

1.6全局异常处理

为什么需要全局异常处理器,不在手写try...catch

新建全局异常类GlobalExecptionHandler

package com.atguigu.cloud.exp;


import com.atguigu.cloud.resp.ResultData;
import com.atguigu.cloud.resp.ReturnCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j
@RestControllerAdvice
public class GlobalExexptionHandler {

    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResultData<String> execption(Exception e){
        System.out.println("####come in GlobalExecptionHandler");
        log.error("全局异常信息:{}",e.getMessage(),e);
        return ResultData.fail(ReturnCodeEnum.RC500.getCode(), e.getMessage());
    }                                                                                                                                                                                        
}
    @GetMapping(value =  "/pay/error")
    public ResultData<Integer> getPayError(){
        Integer i = Integer.valueOf(200);
        try{
            System.out.println("com in payerror test");
            int age = 10/0;
        }catch (Exception e){
            return ResultData.fail(ReturnCodeEnum.RC500.getCode(), e.getMessage());
        }
        return ResultData.success(i);
    }

相关文章:

  • 【IDEA】 配置安装 Leetcode 插件
  • LeetCode 热题 100_跳跃游戏 II(79_45_中等_C++)(贪心算法)
  • RPA+AI 技术到底好在哪里?
  • 深度学习框架对比评测:TensorFlow、PyTorch、PaddlePaddle与MXNet的技术演进与应用实践
  • CUDA与cuDNN 的介绍
  • 从零开始实现Stable Diffusion本地部署
  • HTML图像标签的详细介绍
  • 火绒终端安全管理系统V2.0——行为管理(软件禁用+违规外联)
  • 如何为AI开发选择合适的服务器?
  • 用curl和python通过网络测试Ollama服务器的配置和状态
  • Kafka分区分配策略详解
  • Java基础面试知识路线
  • Hibernate Validation 注解全面教程
  • 批量删除 PPT 文档中的宏
  • TensorFlow之Session
  • 【嵌入式学习】记忆电路 - 锁存器
  • 基于springboot的旅游网站(013)
  • 210、【图论】课程表(Python)
  • Python标准库之sys模块
  • 初入ARM,点灯,按键与中断相结合
  • 常州网站制作机构/免费二级域名分发
  • 重庆代还信用卡网站建设/北京网站优化服务
  • 泰州做网站的/百度搜索关键词推广
  • 专业的网站建设电话/百度在全国有哪些代理商
  • wordpress DUX商店模式/百度首页排名优化服务
  • 网站都需要续费吗/软文标题和内容