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

本文目录如下:

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

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

判断字符串是否为空?

判断是否为 : 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 s = JSON.parseObject(JSON.toJSONString(user), new TypeReference>() {});
    
    Student xqz= new Student ();
    user.setName("谢清照");
    user.setAge(18);
    //java对象转map
    Map<String, Object> xqzhao = JSONObject.parseObject(JSONObject.toJSONString(xqz));
}

三、模块难点总结

1、模块一: DeptUser (简单)


2、模块二: WebHome (中等)

存储过程


3、模块三: WebFlow (困难)

XML文档对象处理

通过 SAXReader 把字符串解析为 XML文档对象: Document

private Document GetXPDLXml(String instanceid) {
    CommonR r = GetInstanceXPDL(instanceid);
    if (StringUtils.isEmpty(r.getData())) {
        return null;
    }

    String gbEncode = "GB2312";
    byte[] byteXpdl = r.getData().replace(gbEncode, "UTF-8").getBytes(Charset.forName(gbEncode));
    ByteArrayInputStream bis = new ByteArrayInputStream(byteXpdl);
    // SAXReader: dom4j 库中的一个 XML 解析器,用于解析 XML 文档。
    SAXReader reader = new SAXReader();
    // Document: 代表一个 XML 文档对象,是 dom4j 库中的一个核心类。它提供了对 XML 文档的访问和操作方法,负责管理文档的结构和内容。
    Document doc_XPDL = null;
    try {
        doc_XPDL = reader.read(bis);
    } catch (DocumentException e) {
        e.printStackTrace();
    }
    return doc_XPDL;
}

获取XML文档对象中存储的信息

import javax.xml.soap.Node;

public CAppInfo(Node node) {
	// < AppInfo TableStyleName = "默认样式" TableStyleID = "0418cf8d-af21-4477-8706-487c53a5d678" TableName = "T_P_bsbzdj" />
    AppName = node.getAttributes().getNamedItem("TableName").getNodeValue();
    TableStyleID = node.getAttributes().getNamedItem("TableStyleID").getNodeValue();
    TableStyleName = node.getAttributes().getNamedItem("TableStyleName").getNodeValue();
}

应用Enum

public enum ControlType {
    CanSeeAttachment,
    CanSeeDealInfo,
    // ......
}

public boolean GetBtnControlValue(ControlType controlType) {
    for (CAttribute attr : listAttribute) {
        if (attr.Name.toLowerCase().equals("btncontrol")) {
            String tmp = attr.Value;
            String[] tmpArray = tmp.split("\\|");
            // 重点在: controlType.ordinal()
            return Boolean.parseBoolean(tmpArray[controlType.ordinal() - 1]);
        }
    }

    return false;
}

你可能感兴趣的:(Spring,Cloud学习笔记,spring,cloud,学习,笔记)