私はYAMLを初めて使用し、次のようなYAML構成ファイルを解析しました。
applications:
authentication:
service-version: 2.0
service-url: https://myapp.corp/auth
app-env: DEV
timeout-in-ms: 5000
enable-log: true
service1:
enable-log: true
auth-required: true
app-env: DEV
timeout-in-ms: 5000
service-url: https://myapp.corp/service1
service-name: SomeService1
service-version: 1.1
service-namespace: http://myapp.corp/ns/service1
service2:
enable-log: true
auth-required: true
app-env: DEV
timeout-in-ms: 5000
service-url: https://myapp.corp/service2
service-name: SomeService2
service-version: 2.0
service-namespace: http://myapp.corp/ns/service2
次のMap
構造に解析する必要があります
+==================================+
| Key | |
+==================================+
| authentication | AuthConfig |
+----------------------------------+
| service1 | ServiceConfig |
+----------------------------------+
| service2 | ServiceConfig |
+----------------------------------+
AuthConfig
とServiceConfig
は、システムのカスタムオブジェクトです。
誰かがそれを行う方法のヒントを提供できますか?
Jackson というJavaのパッケージがあり、 [〜#〜] yaml [〜#〜] (およびJSON、CSV、XML)間のマッピングを処理します。 )およびJavaオブジェクト。出くわすほとんどの例はJSONの例ですが、YAMLリンクは切り替えが簡単であることを示しています。すべてがObjectMapper
を通過します:
_ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
_
次に、これを使用して、リフレクションを介してオブジェクトを逆シリアル化できます。
_ApplicationCatalog catalog = mapper.readValue(yamlSource, ApplicationCatalog.class);
_
クラスは次のように設定します(例を簡単にするために、すべてを公開しました)。
_class ApplicationCatalog {
public AuthConfig authentication;
public ServiceConfig service1;
public ServiceConfig service2;
}
class AuthConfig {
@JsonProperty("service-version")
public String serviceVersion;
@JsonProperty("service-url")
public String serviceUrl;
@JsonProperty("app-env")
public String appEnv;
@JsonProperty("timeout-in-ms")
public int timeoutInMs;
@JsonProperty("enable-log")
public boolean enableLog;
}
class ServiceConfig {
...
}
_
JsonProperty annotation がJavaフィールドの名前をYAMLフィールドに変更していることに注意してください。これは、JavaでJSONとYAMLを処理する最も便利な方法だと思います。また、非常に大きなオブジェクトには ストリーミングAPI を使用する必要がありました。