5.Spring Cloud (Hoxton.SR8) 实战笔记—项目中细节实现 约束 注意事项、模块难点总结

news/2024/5/24 11:38:01/

本文目录如下:

  • 二、项目中细节实现 & 约束 & 注意事项
    • 判断字符串是否为空?
    • 入参 'Num' 字段转换为 'num' 的问题?
    • 通过 Java 获取时间 (Date类型) 并插入数据库?
    • 神坑: baseMapper.selectById(String str)之坑?
    • AES 实现加密函数, 供模块调用?
    • Java实体类 与 Map 相互转换的方法?
  • 三、WebFlow (流程业务) 模块难点总结
    • XML文档对象处理

二、项目中细节实现 & 约束 & 注意事项

判断字符串是否为空?

判断是否为 : StringUtils.isEmpty(str)
判断是否 非空: StringUtils.isNotEmpty(str)

// StringUtils.isEmpty(str) 内部实现
public static boolean isEmpty(String str) {return str == null || str.length() == 0;
}

入参 ‘Num’ 字段转换为 ‘num’ 的问题?

使用 @JsonProperty字段 进行标注即可。


通过 Java 获取时间 (Date类型) 并插入数据库?

  • java 获取当前时间的三种方法
  • Java时间格式字符串与Date的相互转化
// 创建时间
Calendar calendar= Calendar.getInstance();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// calendar.add(Calendar.HOUR_OF_DAY, 8); // 在原时间上加 8 小时
try {Date date = dateFormat.parse(dateFormat.format(calendar.getTime()));// ...
}  catch (ParseException e) {e.printStackTrace();
}

神坑: baseMapper.selectById(String str)之坑?

  • selectById() 只会根据表的 主键 查询数据, 传入的 参数 只是 字符串 (用于匹配值) 而已。
  • 如果需要根据 指定字段 进行查询, 需要使用 wrapper
  • 使用 selectOne() + wrapperselectList() + wrapper 代替 selectById()

AES 实现加密函数, 供模块调用?

@Component
public class AesUtil {private final static String keyStr = "xqzhao";public static String AesEncrypt(String data) throws Exception {SecretKeySpec secretKey = new SecretKeySpec(keyStr.getBytes(), "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] encryptedData = cipher.doFinal(data.getBytes());return Base64.getEncoder().encodeToString(encryptedData);}public static String AesDecrypt(String data) throws Exception {SecretKeySpec secretKey = new SecretKeySpec(keyStr.getBytes(), "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(data));return new String(decryptedData);}
}

Java实体类 与 Map 相互转换的方法?

点击查看: Java对象与Map转换,你了解几种?

public static void main(String[] args){Map<String, Object> map = new HashMap();map.put("name", "谢清照");map.put("age", 18);//map转java对象Student stu = JSONObject.parseObject(JSONObject.toJSONString(map), Student .class);// Map<String, Object> s = JSON.parseObject(JSON.toJSONString(user), new TypeReference<Map<String, Object>>() {});Student xqz= new Student ();user.setName("谢清照");user.setAge(18);//java对象转mapMap<String, Object> xqzhao = JSONObject.parseObject(JSONObject.toJSONString(xqz));
}

三、WebFlow (流程业务) 模块难点总结

一个崭新的业务流程, 通过XML字符串的格式保存在数据库中。

XML文档对象处理

  • 点击查看: org.dom4j.Document的主要用法
  • 分别使用 dom 和 dom4j 解析XML文档
  • 0.XML 中 text、value 的区别

在下面的语句中, name属性名, “谢清照” 为该属性的 value, XieQingZhaoText

<Student name="谢清照" age=18>XieQingZhao</Student>
  • 1.通过 SAXReader 把字符串解析为 XML文档对象: Document
// Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。
Document xmlDoc = null;
try {if (StringUtils.isNotEmpty(xpdl)){xmlDoc = DocumentHelper.parseText(xpdl);}
} catch (DocumentException e) {e.printStackTrace();
}
  • 2.Document 中的方法
Element element = doucument.getRootElement();   // 获取根节点
// 获取路径下的单个根节点  输出匹配到的第一个, 下面的 path 中, 此时ItemName就是根节点
Node node = document.selectSingleNode("root/body/detail/StuItem/ItemName");
// 获取路径下的所有根节点
List<Node> nodes = document.selectNodes(path);
  • 3.Node 中的方法
// 获取路径下的单个根节点  输出匹配到的第一个, 下面的 path 中, 此时ItemName就是根节点
Node node = node.selectSingleNode("root/body/detail/StuItem/ItemName");
// 获取路径下的所有根节点
List<Node> nodes = node.selectNodes(path);
  • 4.Eelement 中的方法

当要获得 XML节点 中的元素时就需要把,Node类型 的数转化为 org.dom4j.Eelement类型,然后运用 Eelement类 中的方法。

Element element = (Element)node;   		// 强制转换
Short type = element.getNodeType();			// 获取该节点类型
String name = element.getNodeTypeName();   	// 获取该节点名称// 属性
Attribute isUseAttr = element.attribute("IsUse");   // 获取属性对象
String value = element.attributeValue("Name");		// 获取属性值 - Name为属性名称
element.setAttributeValue("HandleState", "1");		// 为某个属性设置值// 文本值
String text = element.getText();     // 获取该节点的文本值
element.setText("该节点的文本值");    // 为该节点设置新的文本值// 结点
// 获取路径下的单个根节点  输出匹配到的第一个, 下面的 path 中, 此时ItemName就是根节点
Node node = element.selectSingleNode("root/body/detail/StuItem/ItemName");
// 获取路径下的所有根节点
List<Node> nodes = element.selectNodes(path);
// 获取孩子结点
List<Element> childs = element.elements();
  • 3.Element 和Node 的区别

ElementNode 都是 org.dom4j 包中的类,用于处理 XML 文档中的节点。它们两者之间的区别在于:

  • Node 是一个通用的节点类型,可以表示 任何类型 的节点 (如元素文本注释等)。
  • Element 则是 Node 的一个子类,用于表示 XML 文档中的 元素节点

节点方法:

  • Node 类型 提供了通用的节点方法,如 getNodeNamegetTextgetParent 等。
  • Element 类型 除了通用方法外,还提供了一些专门处理元素节点的方法,如 getNameaddAttributegetNamespaceURI 等。

子结点:

  • NodegetChildNodes() 方法返回所有子节点的列表。
  • Elementelements() 方法返回指定名称的子元素节点列表。

总结:

  • Element 类型 适用于处理 XML 文档中的 元素节点,它提供了一些专门处理元素节点的方法和属性访问方式。
  • Node 类型 则更具通用性,可以用于表示任何类型的节点,但处理起来 相对复杂


http://www.ppmy.cn/news/46839.html

相关文章

[Eigen中文文档] 切片和索引

专栏总目录 本文目录 概述基本的切片编译时的大小和步长倒序索引序列自定义索引列表 英文原文(Slicing and Indexing) 本文介绍了如何使用操作运算符operator()索引行和列的子集。该 API 在 Eigen 3.4 中引入。它支持 block API 提供的所有功能。特别是&#xff0c;它支持切片…

查询练习:条件加组筛选

查询 student 表中至少有 2 名男生的 class 。 -- 查看学生表信息 SELECT * FROM student; ---------------------------------------- | no | name | sex | birthday | class | ---------------------------------------- | 101 | 曾华 | 男 | 1977-09-01 | 95…

vue 动态组件

一见如故 // 一般配合<keep-alive>组件&#xff0c;避免反复重新渲染dom <keep-alive><component :is"com"></component> </keep-alive> <script> import Left from ./LeftComponent.vue import Right from ./RightComponent.v…

Ae:自动定向

Ae 菜单&#xff1a;图层/变换/自动定向 Auto-Orient 快捷键&#xff1a;Ctrl Alt O 自动定向 Auto-Orient是 Ae 图层中的一个附加的、隐藏实现&#xff08;不会在时间轴面板上更改属性的值&#xff09;的功能&#xff0c;它可以使得图层自动旋转或改变方向以朝向指定的运动路…

【Linux阅读笔记】LinuxC一站式编程1-程序基本概念与gdb调试

目录 程序基本概念配置开发环境第一个程序C 复习 gdb单步执行与跟踪断点观察点段错误 程序基本概念 使用 ubuntu22.0 作为演示环境&#xff08;vmware 虚拟机搭设&#xff09; 配置开发环境 配置完基础开发环境后&#xff0c;可以直接下载一个 vscode 作为初始 LDE 使用&#x…

机器学习 day03(成本函数,简化后的和一般情况下的成本函数)

1. 成本函数 平方误差成本函数是最通常用于线性回归的成本函数最终&#xff0c;我们要找到一组w和b&#xff0c;让j函数的值最小误差&#xff1a;ŷ - y 2. 简化后的平方误差成本函数&#xff0c;即b 0 当w 1时&#xff0c;f(x) x&#xff0c;J(1) 0 左侧为f(x)函数&am…

Python 图像处理实用指南:11~12

原文&#xff1a;Hands-On Image Processing with Python 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 计算机视觉 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 当别人说你没有底线的时候&#xff0c;…

程序员 如何避免职场危机,打造自己稀缺性

你在职场上如何又脱颖而出 你唯一的办法就干嘛 找一找怎么才能构建我自己的稀缺性 我经过我 多年的工作和有观察的体验 化是什么呢 从技术迭代进步的角度来说 因为软件越来a p i化 个人的能力被解脱了 一定会向上下有延伸 因为当你做一块 以前是一年做下来时间只需要一个月 是一…

(一)Linux:自由、开放、灵活的操作系统内核

目录 一、Linux的发展史 二、linux的开源 三、目前的现状 四、企业应用现状 五、发行的版本 六、安装与使用 七、利用云服务器配置Linux环境 一、Linux的发展史 Linux是一款由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;开发的操作系统内核&#xff0c;它的发布…

windows开启自启动jar包

1.新建txt文本文档 2.复制以下内容&#xff0c;并记得修改 appName 到自己jar包所在目录 并修改jar包名称 3.重命名文本文档.txt为 &#xff08;自己起名字&#xff09;.bat (注&#xff1a;修改成.bat文件&#xff0c;名字自己起) echo off setlocal set appNameD:/tes…

Qt QList 详解:从底层原理到高级用法

目录标题 引言&#xff1a;QList 的重要性与应用场景&#xff08;Introduction: The Importance and Application Scenarios of QList&#xff09;QList的常用接口QList和std::listQList 使用场合迭代器&#xff1a;遍历 QList 中的元素&#xff08;Iterators: Traversing Elem…

在新电脑上重启自己的django+vue项目遇到的数据库和Nodejs问题

数据库问题 今天在新电脑上重启自己备份的项目文件,迁移数据库的时候一直出现这个问题,运行代码也是这个问题。很奇怪,明明是不出错的代码做的备份怎么会出问题? 找了一下午,终于晚上把问题解决了。 问题 1、首先是这个问题 2、再往上追溯,发现是这里的问题 3、在原…

【记录】Truenas Scale|中危漏洞,需要SMB签名

部分内容参考&#xff1a;等保测试问题——需要SMB签名(SMB Signing not Required) 以及 ChatGPT。 Truenas常用SMB服务&#xff0c;但默认并不开启SMB签名。这样具有中间人攻击的风险。 一、漏洞详情 1.1 漏洞报告 漏洞提示如下&#xff1a; 1.2 漏洞介绍 SMB是一个协议名…

git --- git tag用法

1 什么是tag tag是git版本库的一个标记,指向某个commit的指针。 tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 …这样的标签。 tag感觉跟branch有点相似,但是本质上和分工上是不同的: tag 对应某次commit, 是一个点,是不可移动的。 b…

动态代理入门必看

基本介绍 代理 就是让代理角色帮助真实角色完成一件事情。比如说&#xff0c;我叫我们朋友帮我完成博客&#xff0c;那么这个朋友就是代理&#xff0c;朋友不是我&#xff0c;但是和我完成同样的事&#xff0c;并且还可以对这件事加入他的行为逻辑。 不论是什么代理方法&…

1.docker-安装及使用

1.安装步骤 Install Docker Engine on CentOS 1. 确定CenOS7及以上版本 cat /etc/redhat-release2.卸载旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine3.yum安…

HuggingGPT强势来袭,LLM+专家模型,迈向更通用的AI

出品人&#xff1a;Towhee 技术团队 超级组合&#xff1a;HuggingFace ChatGPT HuggingGPT强势来袭。人类仿佛距离真正的AGI又更近了一步。 HuggingGPT是浙江大学与微软亚洲研究院的联手研究&#xff0c;发布之后迅速引发关注&#xff0c;已经开源。 它的使用非常简单&#x…

【密码学复习】第六讲 HASH函数和MAC(三)

H是一个Hash函数 K表示密钥 B表示计算消息摘要时消息分块的字节长度&#xff08;对MD5和SHA-1是512比特,64字节&#xff09; L表示消息摘要按字节计算的长度&#xff08;对MD5是16字节&#xff09; ipad表示0x36重复B次&#xff0c;opad表示0x5c重复B次。 K可以…

有关WPF的一些事

RaisePropertyChanged和OnPropertyChanged的区别 WPF中&#xff0c;数据绑定是实现MVVM模式的关键。在数据绑定的过程中&#xff0c;我们需要在数据发生变化时及时通知UI更新。为了实现这个功能&#xff0c;WPF提供了两个重要的方法&#xff1a;WPFRaisePropertyChanged和OnPr…

逆向-还原代码之(*point)[4]和char *point[4] (Interl 32)

// source code #include <stdio.h> #include <string.h> #include <stdlib.h> /* * char (*point)[4] // 数组指针。 a[3][4] // 先申明二维数组,用它来指向这个二维数组 * char *point[4] // 指针数组。 a[4][5] // 一连串的指针…