fix(pdd): sku-overrides Converter 改为具名类,避免 MVC ConversionService 无法解析 lambda 泛型导致启动失败
Made-with: Cursor
This commit is contained in:
parent
9c1fe79acd
commit
679a32e284
|
|
@ -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<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<>();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue