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

news/2024/12/5 1:51:24/

本文目录如下:

  • 二、项目中细节实现 & 约束 & 注意事项
    • 判断字符串是否为空?
    • 入参 '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化 个人的能力被解脱了 一定会向上下有延伸 因为当你做一块 以前是一年做下来时间只需要一个月 是一…