fix(pdd): 兼容 EXTERNAL_PDD_SKU_OVERRIDES=[] 字符串绑定 List(K8s/Helm 环境变量)

Made-with: Cursor
This commit is contained in:
huangyujie 2026-03-24 20:20:18 +08:00
parent cce55fd98a
commit 9c1fe79acd
1 changed files with 33 additions and 0 deletions

View File

@ -1,7 +1,16 @@
package cn.qihangerp.service.external.pdd; 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.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import java.util.ArrayList;
import java.util.List;
/** /**
* @author guochengyu * @author guochengyu
@ -9,4 +18,28 @@ import org.springframework.context.annotation.Configuration;
@Configuration @Configuration
@EnableConfigurationProperties(ExternalPddProperties.class) @EnableConfigurationProperties(ExternalPddProperties.class)
public class ExternalPddConfiguration { 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<String, List<ExternalPddProperties.PddSkuOverride>> externalPddSkuOverridesStringConverter() {
return source -> {
String s = source == null ? "" : source.trim();
if (s.isEmpty() || "[]".equals(s)) {
return new ArrayList<>();
}
try {
List<ExternalPddProperties.PddSkuOverride> 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<>();
}
};
}
} }