ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -542,8 +542,12 @@ * @param dataClazz 数据对象的Class */ @SuppressWarnings("unchecked") public void writeAdditionalSheet(List<?> dataList, String sheetName, Class<?> dataClazz) { if (dataList == null) { dataList = new ArrayList<>(); public void writeAdditionalSheet(List<?> dataList, String sheetName, Class<?> dataClazz) { // 没有数据或没有行类型时跳过附加 Sheet: // SatisfactionExportBundle.empty() 的 rowClass 为 null,若继续执行会把 this.clazz 置空, // 随后 getFields() 调用 clazz.getSuperclass() 触发 NullPointerException。 if (dataClazz == null || dataList == null || dataList.isEmpty()) { return; } // 保存原始状态 Class<T> originClazz = this.clazz; @@ -1341,6 +1345,11 @@ */ public List<Object[]> getFields() { List<Object[]> fields = new ArrayList<Object[]>(); // 防御:clazz 为空时不再调用 getSuperclass(),避免 NullPointerException。 if (clazz == null) { log.warn("ExcelUtil.clazz 为空,无法解析导出字段,跳过当前 Sheet"); return fields; } List<Field> tempFields = new ArrayList<>(); tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); smartor/src/main/java/com/smartor/message/LishuiMessageConfigProviderImpl.java
@@ -1,5 +1,6 @@ package com.smartor.message; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.message.sms.provider.ls.LishuiMessageConfig; @@ -36,6 +37,12 @@ */ private static final String CONFIG_KEY = "ls.msg.info"; private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private static final TypeReference<Map<String, String>> MSG_INFO_TYPE = new TypeReference<Map<String, String>>() { }; private final ISysConfigService configService; public LishuiMessageConfigProviderImpl(ISysConfigService configService) { @@ -60,7 +67,7 @@ Map<String, String> msgInfo = new HashMap<>(); if (StringUtils.isNotEmpty(configValue)) { try { msgInfo = new ObjectMapper().readValue(configValue, Map.class); msgInfo = OBJECT_MAPPER.readValue(configValue, MSG_INFO_TYPE); } catch (Exception e) { log.error("【LishuiMessageConfigProviderImpl】解析 {} 失败,orgid:{},value:{},err:{}", CONFIG_KEY, orgid, configValue, e.getMessage(), e);