Quarkus实战:专为Kubernetes而优化的Java解决方案
上QQ阅读APP看书,第一时间看更新

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核心的转换器。