4.2. ネストされたオブジェクト設定の使用
既存のクラス内でネストされたクラスを定義できます。この手順では、config-quickstart
プロジェクトでネストされたクラスの設定を作成する方法を説明します。
前提条件
-
config-quickstart
プロジェクトを作成している。
手順
GreetingConfiguration.java
ファイルを確認し、次のインポートステートメントが含まれていることを確認します。src/main/java/org/acme/config/GreetingConfiguration.java
import io.quarkus.arc.config.ConfigProperties; import java.util.Optional; import java.util.List;
@ConfigProperties
アノテーションを使用して、GreetingConfiguration.java
ファイルに設定を追加します。次の例は、
GreetingConfiguration
クラスとそのプロパティーの設定を示しています。src/main/java/org/acme/config/GreetingConfiguration.java
@ConfigProperties(prefix = "greeting") public class GreetingConfiguration { public String message; public String suffix = "!"; public Optional<String> name; }
次の例に示すように、
GreetingConfiguration
クラス内にネストされたクラスを追加します。src/main/java/org/acme/config/GreetingConfiguration.java
@ConfigProperties(prefix = "greeting") public class GreetingConfiguration { public String message; public String suffix = "!"; public Optional<String> name; public ContentConfig content; public static class ContentConfig { public Integer prizeAmount; public List<String> recipients; } }
この例は、ネストされたクラス
ContentConfig
を示しています。フィールドの名前 (ここではcontent
) が、オブジェクトにバインドされるプロパティーの名前を決定します。application.properties
ファイルでgreeting.content.prize-amount
およびgreeting.content.recipients
設定プロパティーを設定します。次の例は、
GreetingConfiguration
クラスとContentConfig
クラスのプロパティーの値を示しています。src/main/resources/application.properties
greeting.message = hello greeting.name = quarkus greeting.content.prize-amount=10 greeting.content.recipients=Jane,John
@Inject
アノテーションを使用してGreetingConfiguration
クラスをGreetingResource
クラスに注入し、/greeting
エンドポイントが返すメッセージ文字列を更新し、追加した新しいgreeting.content.prize-amount
プロパティーおよびgreeting.content.recipients
プロパティーに設定した値をメッセージに表示させます。src/main/java/org/acme/config/GreetingResource.java
@Path("/greeting") public class GreetingResource { @Inject GreetingConfiguration config; @GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return config.message + " " + config.name.orElse("world") + config.suffix + "\n" + config.content.recipients + " receive total of candies: " + config.content.prizeAmount; } }
開発モードでアプリケーションをコンパイルして起動します。
./mvnw quarkus:dev
重要クラスプロパティーの値を指定しないと、アプリケーションはコンパイルに失敗し、値が指定されていないことを示す
javax.enterprise.inject.spi.DeploymentException
を受け取ります。これは、Optional
フィールドおよびデフォルト値のフィールドには適用されません。エンドポイントがメッセージを返すことを確認するには、新しいターミナルウィンドウに以下のコマンドを入力します。
curl http://localhost:8080/greeting
1 行目に挨拶、2 行目に賞金の受賞者と賞金額が書かれたメッセージを受信します。
hello quarkus! Jane,John receive total of candies: 10
- アプリケーションを停止するには、CTRL+C を押します。
@ConfigProperties
のアノテーションが付けられたクラスは、以下に示す例のような Bean Validation のアノテーションを付けることができます。
@ConfigProperties(prefix = "greeting") public class GreetingConfiguration { @Size(min = 20) public String message; public String suffix = "!"; }
プロジェクトには quarkus-hibernate-validator
依存関係が含まれている必要があります。