fix(pdd): sku-overrides Converter 改为具名类,避免 MVC ConversionService 无法解析 lambda 泛型导致启动失败

Made-with: Cursor
This commit is contained in:
huangyujie 2026-03-24 20:30:18 +08:00
parent 9c1fe79acd
commit 679a32e284
2 changed files with 40 additions and 33 deletions

View File

@ -1,16 +1,7 @@
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
@ -18,28 +9,4 @@ import java.util.List;
@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<>();
}
};
}
} }

View File

@ -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} 列表
* <p>
* 必须实现为<strong>带泛型的具体类</strong>不能用法方法引用/lambda 注册为 Bean否则 Spring MVC
* {@code mvcConversionService} 无法解析泛型会启动失败
*/
@Component
public class ExternalPddSkuOverridesStringConverter
implements Converter<String, List<ExternalPddProperties.PddSkuOverride>> {
private static final Logger log = LoggerFactory.getLogger(ExternalPddSkuOverridesStringConverter.class);
@Override
public List<ExternalPddProperties.PddSkuOverride> convert(String 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<>();
}
}
}