繁体   English   中英

用于微配置文件配置映射的 Quarkus 转换器未提供完整的 object

[英]Quarkus converter for microprofile configMapping not giving full object

我有以下配置:

my:
  filter:
      number-range:
        - range:
              from: +994700110000
              to: +994700110002

配置映射是:

@ConfigMapping(prefix = "my.filter")
public interface SmsGatewayFilterListConfig {

    List<RangeWrapper> numberRange();
}

与pojos:


public record RangeWrapper(Range range) {
}

public record Range(String from,
                    String to) {
}

还有我的转换器(在META-INF/services/org.eclipse.microprofile.config.spi.Converter中注册):

import org.eclipse.microprofile.config.spi.Converter;
import org.yaml.snakeyaml.Yaml;

public class RangeWrapperConverter implements Converter<RangeWrapper> {
    @Override
    public RangeWrapper convert(String s) throws IllegalArgumentException, NullPointerException {
        System.out.println("Got: " + s);
        return new Yaml().loadAs(s, RangeWrapper.class);
    }
}

我有quarkus-config-yaml依赖集,并且正在使用 application.yml

当我尝试启动我的 quarkus 应用程序时,我遇到了解析问题,因为传递给我的转换器的字符串是:

{"number-range": [{"range": {"from": "+994700110000"

这似乎以某种方式采用 json 格式,即使这样也没有提供我的 yaml 的全部内容。 请问有什么问题吗?

我的建议是使用以下映射策略:

@ConfigMapping(prefix = "my.filter")
interface RangesMapping {
    List<Ranges> numberRange();

    interface Ranges {
        Range range();

        interface Range {
            String from();

            String to();
        }
    }
}

这不需要任何特定的Converter 一切都会自动为您处理。

您当前看到的是提供父属性my.filter树的值的遗留功能,因此用户可以使用转换器,因为没有对ListMap的自动转换支持。 不再是这种情况,并且此类属性值将被删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM