以下のYAMLを以下のドメインモデルにdeseriliseするためにsnakeyamlを使用しようとしていますが、java.lang.ClassCastExceptionを取得し続けます。java.util.LinkedHashMapはConfigurableThingにキャストできません。SnakeYamlオブジェクトのリストを含むDeserialiseクラス
注ConfigurableThingをデシリアライズすると、ConfigurableThingsのリストをデシリアライズして問題が発生した場合にのみ、正常にデシリアライズできます。
コードYAML
File file = new File(classLoader.getResource("config.yml").getFile());
try(InputStream in = new FileInputStream(file)){
Yaml yaml = new Yaml();
Configuration config = yaml.loadAs(in,Configuration.class);
}
をdeserialiseする
things:
- type: TYPE1
name: foo
value: 2.00
- type: TYPE2
name: bar
value 8.00
モデル
public final class Config {
private List<ConfigurableThing> things;
//Getter and Setter
}
public final class ConfigurableThing {
private Type type;
private String name;
private BigDecimal value;
//Getters and Setters
}
public enum Type {
TYPE1,TYPE2
}
完璧、ありがとう!後世のために、YAMLをロードしている間違ったコードを追加しました。 –
あなたの編集提案は、人々がそれを拒否したにもかかわらず正しかったです。 'addTypeDescription'は正しい名前です。 SnakeYamlのドキュメンテーションはちょうど間違っている 'addTypeDefinition'を使います。 – flyx
これはうまくいくが、いくつかの行を追加するだけで、最後の行で何が起きているのかが少し分かる。File file = new File( "configuration.yaml"); InputStream in =新しいFileInputStream(ファイル); 構成リスト=(構成)yaml.load(入力); –