springcloud第4季 项目工程搭建与需求说明1

一   需求说明

1.1  实现结构图

订单接口调用支付接口

1.2 版本管理

二 工程搭建

2.1 工程结构以及搭建步骤

2.1.1 搭建步骤

2.1.2 工程结构

 

2.2  工程commons-api模块

2.2.1 定义统一请求响应报文

2.2.1.1 返回数据结构

 2.2.1.2 代码

 1.枚举类

package com.jurf.ms.api.resp;

import lombok.Getter;

import java.util.Arrays;

/**
 * @auther zzyy
 * @create 2023-12-22 15:45
 */
@Getter
public enum ReturnCodeEnum
{
    //1 举值
    /**操作失败**/
    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", "不支持的认证模式");

    //如何定义一个通用的枚举类,对于枚举编写,阳哥小口诀
    //举值-构造-遍历

    //2 构造
    private final String code; // 自定义的状态码
    private final String message; // 自定义的描述信息

    ReturnCodeEnum(String code, String message)
    {
        this.code = code;
        this.message = message;
    }

    //3 遍历
    //3.1 传统版
    public static ReturnCodeEnum getReturnCodeEnumV1(String code)
    {
        for (ReturnCodeEnum element : ReturnCodeEnum.values()) {
            if(element.getCode().equalsIgnoreCase(code))
            {
                return element;
            }
        }
        return null;
    }
    //3.2 Stream流式计算版
    public static ReturnCodeEnum getReturnCodeEnumV2(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(getReturnCodeEnumV1("200"));
        System.out.println(getReturnCodeEnumV1("200").getCode());
        System.out.println(getReturnCodeEnumV1("200").getMessage());

        System.out.println();

        System.out.println(getReturnCodeEnumV2("404"));
        System.out.println(getReturnCodeEnumV2("404").getCode());
        System.out.println(getReturnCodeEnumV2("404").getMessage());
    }*/
}

2.响应报文类

package com.jurf.ms.api.resp;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * @auther zzyy
 * @create 2023-12-22 16:18
 */
@Data
@Accessors(chain = true)
public class ResultData<T>
{

    private String code;/** 结果状态 ,具体状态码参见枚举类ReturnCodeEnum.java*/
    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;
    }
}

2.2.2 定义统一异常信息

1.结构图

2.代码

@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());
    }
}

2.3  工程consumer-8081

2.3.1 核心代码介绍

1.controller

2.代码

@RestController
public class OrderController {
    public static final String PaymentSrv_URL = "http://localhost:9091";//先写死,硬编码
   // public static final String PaymentSrv_URL = "http://cloud-payment-service";//服务注册中心上的微服务名称

    @Resource
    private RestTemplate restTemplate;

    @GetMapping(value = "/consumer/pay/get/{id}")
    public ResultData getPayInfo(@PathVariable("id") String id)
    {
        System.out.println("请求地址:"+PaymentSrv_URL + "/pay/query/"+id);
        return restTemplate.getForObject(PaymentSrv_URL + "/pay/query/"+id,ResultData.class,id);
    }
}

3.配置文件 

2.4  工程provider-9091

2.4.1 核心代码介绍

1.controller

2.配置文件

 3.pom文件,需要引入commons-api模块,需要先在commons-api进行install一下

2.5 启动测试

1.服务启动

2.服务启动访问地址

http://localhost:8081/consumer/pay/get/456

3.gitee地址

https://gitee.com/jurf-liu/mscloud-demo-2024.git 

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值