Explorar el Código

fix: SubscribeMessageService 改用 @ConfigurationProperties 绑定 wechat.message-template,修复 @Value 注入嵌套 YAML Map 启动失败

Xiaogang Liao hace 5 días
padre
commit
1369dcb827

+ 30 - 0
train-backend/src/main/java/com/train/config/WechatProperties.java

@@ -0,0 +1,30 @@
+package com.train.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 微信相关配置(@ConfigurationProperties 绑定 wechat.* 前缀)。
+ *
+ * 说明:订阅消息模板 message-template 是嵌套 YAML Map,
+ * 用 @Value("${wechat.message-template}") 无法解析(Spring 占位符只能解析叶子属性),
+ * 必须用 @ConfigurationProperties 绑定整个前缀。
+ */
+@Component
+@ConfigurationProperties(prefix = "wechat")
+public class WechatProperties {
+
+    /** 订阅消息模板 ID:messageKey -> templateId */
+    private Map<String, String> messageTemplate = new HashMap<>();
+
+    public Map<String, String> getMessageTemplate() {
+        return messageTemplate;
+    }
+
+    public void setMessageTemplate(Map<String, String> messageTemplate) {
+        this.messageTemplate = messageTemplate;
+    }
+}

+ 4 - 2
train-backend/src/main/java/com/train/service/SubscribeMessageService.java

@@ -2,6 +2,7 @@ package com.train.service;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.train.config.WechatProperties;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
@@ -111,10 +112,11 @@ public class SubscribeMessageService {
      * 从配置读取 messageKey 对应的模板 ID(缺省为空字符串)。
      * 配置形如:wechat.message-template.followup-t1: <templateId>
      */
-    @Value("${wechat.message-template}")
-    private Map<String, String> messageTemplates;
+    @Resource
+    private WechatProperties wechatProperties;
 
     private String templateIdByKey(String messageKey) {
+        Map<String, String> messageTemplates = wechatProperties.getMessageTemplate();
         if (messageTemplates == null) {
             return "";
         }