
4.10 创建自定义转换器
问题
如何实现一个自定义转换器?
解决方案
你可以通过实现org.eclipse.microprofile.config.spi.Converter Java SPI将一个属性从String转换为任何类型的对象。
Quarkus使用Eclipse MicroProfile Configuration规范来实现所有关于配置的逻辑,该规范提供了org.eclipse.microprofile.config.spi.Converter Java SPI(https://oreil.ly/kcqQw)接口来实现配置值到自定义类型的转换。
例如,你可以将一个百分比值(即15%)转换为Percentage类型,将百分比包装为double类型。
创建一个新的POJO类:org.acme.quickstart.Percentor.java:
然后创建一个类org.acme.quickstart.percentorConverter.java,将字符串表示转换为百分比表示:
❶设置优先级。在这个示例中,它是可选的
❷设置通用的转换类型
你需要将其注册为一个Java SPI。在src/main/resources/META-INF创建services文件夹,然后在services文件夹中创建一个名为org.eclipse.microprofile.config.spi.Converter的文件,内容如下:
修改org.acme.quickstart.GreetingResource.java类注入此属性:
在src/main/resources目录下的application.properties文件中添加一个新属性:
在终端窗口中,请求/hello/vat,输出结果是把vat的值转成的double类型:
讨论
默认情况下,如果在一个转换器上找不到@Priority注解,那么它的优先级为100。Quarkus转换器的优先级为200,所以如果你想替换一个Quarkus转换器,应该使用更大的数值;如果你不需要替换Quarkus转换器,使用默认的值即可。
4.1节中已经列出了Quarkus核心的转换器。