簡體   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