Mit SnakeYAML des TypeDescription
kann ich Art Informationen über Listen hinzufügen und Maps:SnakeYAML: Wie zum Laden Bean-Eigenschaft Typen einzustellen
TypeDescription td = new TypeDescription(MyBean.class, "!mybean");
td.putMapPropertyType("mymap", String.class, MyOtherBean.class);
td.putListPropertyType("mylist", MyOtherBean.class);
Auf diese Weise ich Kollektionen mit Instanzen von MyOtherBean ohne bevölkern können verlassen auf anderen tags:
---
!mybean
mymap:
foobar: # will map to an instance of MyOtherBean
otherbeanprop1: foo
otherbeanprop2: bar
mylist: # will contain instances of MyOtherBean
- otherbeanprop1: foo
otherbeanprop2: bar
gibt es eine einfache Möglichkeit, so etwas zu tun:
td.putPropertyType("myotherbean", MyOtherBean.class);
, so dass die Eigenschaft myotherbean
in MyBean
würde mit einer einzigen Instanz von MyOtherBean
bestückt werden? Dinge, die ich versuche zu vermeiden:
- setzen zusätzliche Tags (wie
!myotherbean
) in der YAML-Datei - die anderen Bohnen Eigenschaften aus einer Karte zu laden und den Aufbau der Bohne selbst
ich bereits gespielt haben um mit diesem und ich glaube, ich brauche einen benutzerdefinierten Konstruktor wie folgt (von der SnakeYAML Dokumentation angepasst) zu erstellen:
class SelectiveConstructor extends Constructor {
public SelectiveConstructor() {
// define a custom way to create a mapping node
yamlClassConstructors.put(NodeId.mapping, new ConstructMapping() {
@Override
protected Object constructJavaBean2ndStep(MappingNode node, Object object) {
Class type = node.getType();
if (type.equals(MyBean.class)) {
// something
if (propertyname.equals("myotherbean")) {
// something
}
} else {
// redirect creation to Constructor
return super.constructJavaBean2ndStep(node, object);
}
}
}
}
Das Problem i Ich verstehe nicht wirklich, was genau dort vor sich geht. Bitte lassen Sie mich wissen, wenn es einen einfacheren Weg gibt. Und wenn nicht, würde ich es begrüßen, wenn Sie Ihre Erfahrung damit teilen würden.