SpringCloud-01

server/2024/10/21 0:04:04/

Spring Cloud是一个开源的微服务框架,它基于Spring Boot构建,提供了一系列的工具和组件,用于简化微服务的开发和部署。
Spring Cloud包含了许多常用的微服务模式和解决方案,比如服务发现、负载均衡、断路器、配置中心、网关等。它通过集成各种组件,帮助开发人员快速构建和部署微服务应用。

微服务小口诀:1.建Module
2.改pom
3.写YML
4.主启动
5.业务类

DTO(Data Transfer Object)和 VO(Value Object)都是一种设计模式,用于封装数据和提供服务。它们的主要区别在于:
DTO:用于封装数据传输对象,可以将数据库中的数据转换为前端需要的格式,方便前后端之间的数据交互。
VO:用于封装值对象,可以根据具体的需求来封装不同的数据属性,方便前端页面的显示和交互。

假设我们有一个 User 类,表示用户信息,包含 id、name 和 age 三个属性
1.如果我们需要在前端页面上显示用户信息,但是不需要显示用户的 id 属性。这时候,我们可以使用 VO 来封装用户信息的部分属性,UserVO 只包含了需要在前端页面上显示的属性 name 和 age,而不包含 id 属性。用于在前端页面上显示,这样可以避免将敏感数据传输到前端页面上,增加数据的安全性。
2.如果我们需要在前后端之间传输用户信息的全部属性,可以使用 DTO 来封装数据。UserDTO 包含了用户信息的全部属性,用于在前后端之间传输数据。由于 DTO 只包含数据属性,不包含任何业务逻辑,因此可以避免数据的重复查询和传输,提高程序的性能和效率。

一般而言,调用者不应该获取服务提供者的entity并知道表结构关系,所以服务提供者给出的接口文档都应该成为DTO

一般DTO是前端给后端,VO是后端给前端

@PutMapping("/pay/update")public String updatePay(@RequestBody PayDTO payDTO){Pay pay=new Pay();BeanUtil.copyProperties(payDTO,pay);        //payDTO拷贝到paySystem.out.println(payDTO.toString());int i=payService.update(pay);return "成功更新记录,返回值"+i;}BeanUtil.copyProperties(payDTO,pay);        //payDTO拷贝到pay

推荐@Resource 尽量不用@Autowired

测试工具PostMan Swagger3

规范时间格式
第一种: 加注解

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createTime;

第二种: yml文件里配置
在这里插入图片描述
在这里插入图片描述

统一返回格式
3大标配:1.code状态值 2.message描述 3.data数据
拓展:时间戳

//枚举值
@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;}//第一种:遍历枚举V1 传统方法public static ReturnCodeEnum getReturnCodeEnum(String code){//ReturnCodeEnum.values()相当于上面枚举值数组for (ReturnCodeEnum element : ReturnCodeEnum.values()) {if(element.getCode().equalsIgnoreCase(code)){return element;}}return null;}//第二种:遍历枚举V2public static ReturnCodeEnum getReturnCodeEnumV2(String code){return Arrays.stream(ReturnCodeEnum.values()).filter(x -> x.getCode().equalsIgnoreCase(code)).findFirst().orElse(null);}
}
//统一返回对象
@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<T> 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<T> resultData = new ResultData<>();resultData.setCode(code);resultData.setMessage(message);return resultData;}}
//异常统一返回
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {/*** 默认全局异常处理。* @param e the e* @return ResultData*/@ExceptionHandler(RuntimeException.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)public ResultData<String> exception(Exception e) {System.out.println("----come in GlobalExceptionHandler");log.error("全局异常信息exception:{}", e.getMessage(), e);return ResultData.fail(ReturnCodeEnum.RC500.getCode(),e.getMessage());}
}//controller中调用
if(id==-1)throw new RuntimeException("id不能为负数");

RestTemplate是Spring框架中的一个HTTP客户端工具,用于发送HTTP请求并接收响应。它提供了一种简单、方便的方式来调用RESTful风格的Web服务。


http://www.ppmy.cn/server/110573.html

相关文章

Git 基础使用--权限管理--用户和用户组授权

&#x1f600;前言 本篇博文是关于Git 基础使用–权限管理–用户和用户组授权&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满…

Linux学习之路 -- 信号概念 信号的产生

1、简单介绍 Linux中的信号是一种机制&#xff0c;用于通知进程发生了某个事件。它可以由内核或一个进程发送给另一个进程。信号有默认行为&#xff0c;如终止进程或忽略信号&#xff0c;也可以被进程捕获并自定义处理。常见的信号包括SIGINT&#xff08;中断信号&#xff09;…

GPT说【网络协议实践:HTTP】如何从服务器上发送一个pdf文件给客户端。

要在 Flask 中处理客户端请求 PDF 文件并返回该文件&#xff0c;可以使用 send_file 或 send_from_directory 函数。假设已经有一个 PDF 文件&#xff0c;并且这个文件位于服务器上 static/pdf 目录中&#xff0c;你可以按照以下步骤来实现。 使用 send_file 函数返回 PDF 文件…

刷题记录-HOT 100(一)40道

记录题解和思路。 一、哈希表解决问题 1、两数之和 思路&#xff1a; 创建哈希表&#xff1a; 初始化了一个空字典来存储已经访问过的数字及其对应的索引。 遍历数组&#xff1a; 逐一遍历数组中的每个元素。在遍历过程中&#xff0c;针对每个元素 num&#xff0c;计算出它…

VUE3+FLASK+TYPESCRIPT(实习接触,学习并自主实现)

开头 不同于笔者在学校自学简单的htmljscss的模式&#xff0c;加入了前端框架VUE3真的是一个非常方便的工具&#xff0c;而且本人主攻于c方向&#xff0c;像ts这种更严格的语法标准反而更加比原生js更能让我接受&#xff0c;由于这三个都是本人没接触的库框架和语言&#xff0c…

安装NERDTree

安装NERDTree ⑴、cd ~/.vim ⑵、git clone https://github.com/scrooloose/nerdtree ⑶、把plugin/NERD_tree.vim 和 doc/NERD_tree.txt 分别复制到 /.vim/plugin和/.vim/doc cp nerdtree/plugin/NERD_tree.vim ~/.vim/plugincp nerdtree/plugin/NERDTree.txt ~/.vim/doc⑷、安…

设计模式-结构型模式-外观模式

1.外观模式定义 为子系统中的一组接口提供统一的接口&#xff0c;它定义了一个更高级别的接口&#xff0c;使得子系统更易于使用&#xff1b;相当于公司部门之间通过代表来沟通&#xff0c;这样减少无效、复杂的沟通&#xff1b; 1.1 外观模式的优缺点 优点&#xff1a; 他对…

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能

无人机 PX4 飞控 | ROS应用层开发&#xff1a;指令&#xff08;字符串&#xff09;订阅功能 指令&#xff08;字符串&#xff09;订阅功能代码测试 指令&#xff08;字符串&#xff09;订阅功能 为了通过键盘触发mavros 的不同功能&#xff0c;需要实现一个订阅字符串的功能 该…