diff --git a/service/src/main/java/cn/qihangerp/service/external/pdd/ExternalPddConfiguration.java b/service/src/main/java/cn/qihangerp/service/external/pdd/ExternalPddConfiguration.java index e74ccb95..5f549416 100644 --- a/service/src/main/java/cn/qihangerp/service/external/pdd/ExternalPddConfiguration.java +++ b/service/src/main/java/cn/qihangerp/service/external/pdd/ExternalPddConfiguration.java @@ -1,16 +1,7 @@ package cn.qihangerp.service.external.pdd; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.convert.converter.Converter; - -import java.util.ArrayList; -import java.util.List; /** * @author guochengyu @@ -18,28 +9,4 @@ import java.util.List; @Configuration @EnableConfigurationProperties(ExternalPddProperties.class) public class ExternalPddConfiguration { - - private static final Logger log = LoggerFactory.getLogger(ExternalPddConfiguration.class); - - /** - * K8s/Helm 常把 {@code sku-overrides: []} 落成环境变量 {@code EXTERNAL_PDD_SKU_OVERRIDES=[]}(字符串), - * 默认 Binder 无法转为 {@link List};此处兼容 {@code []}、空串及 JSON 数组。 - */ - @Bean - public Converter> externalPddSkuOverridesStringConverter() { - return source -> { - String s = source == null ? "" : source.trim(); - if (s.isEmpty() || "[]".equals(s)) { - return new ArrayList<>(); - } - try { - List list = - JSON.parseArray(s, ExternalPddProperties.PddSkuOverride.class); - return list != null ? list : new ArrayList<>(); - } catch (JSONException e) { - log.warn("external.pdd.sku-overrides 环境变量/配置非合法 JSON,已按空列表处理: {}", e.getMessage()); - return new ArrayList<>(); - } - }; - } } diff --git a/service/src/main/java/cn/qihangerp/service/external/pdd/ExternalPddSkuOverridesStringConverter.java b/service/src/main/java/cn/qihangerp/service/external/pdd/ExternalPddSkuOverridesStringConverter.java new file mode 100644 index 00000000..8dad5783 --- /dev/null +++ b/service/src/main/java/cn/qihangerp/service/external/pdd/ExternalPddSkuOverridesStringConverter.java @@ -0,0 +1,40 @@ +package cn.qihangerp.service.external.pdd; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * 将配置源中的字符串(含环境变量 {@code EXTERNAL_PDD_SKU_OVERRIDES=[]})转为 {@code sku-overrides} 列表。 + *

+ * 必须实现为带泛型的具体类,不能用法方法引用/lambda 注册为 Bean,否则 Spring MVC + * {@code mvcConversionService} 无法解析泛型会启动失败。 + */ +@Component +public class ExternalPddSkuOverridesStringConverter + implements Converter> { + + private static final Logger log = LoggerFactory.getLogger(ExternalPddSkuOverridesStringConverter.class); + + @Override + public List convert(String source) { + String s = source == null ? "" : source.trim(); + if (s.isEmpty() || "[]".equals(s)) { + return new ArrayList<>(); + } + try { + List list = + JSON.parseArray(s, ExternalPddProperties.PddSkuOverride.class); + return list != null ? list : new ArrayList<>(); + } catch (JSONException e) { + log.warn("external.pdd.sku-overrides 环境变量/配置非合法 JSON,已按空列表处理: {}", e.getMessage()); + return new ArrayList<>(); + } + } +}