2016-12-12 6 views
0

Ich habe einfach YAML Dokument:YAML benutzerdefiniertes Objekt

object: 
    a: 1 
    b: 2 
    c: 3 

Kann ich diese Eigenschaften, um benutzerdefiniertes Objekt zu lesen, die mit 1 Argumente nur einen Konstruktor enthält. Zum Beispiel

public class CustomObject { 
     private String value; 

     public CustomObject(String value) { 
      .... 
     } 

     getValue ... 
     setValue ... 
    } 

den Wert ist das Ergebnis der Eigenschaften Verkettungs a, b, c mit Maske (als 1: 2/3)?

Antwort

1

Dies ist möglich, mit eigenen Konstrukteuren und representers:

class CustomObjectConstructor extends Constructor { 
    public CustomObjectConstructor() { 
     this.yamlConstructors.put(new Tag("!customObject"), new ConstructCustomObject()); 
    } 

    private class ConstructCustomObject extends AbstractConstruct { 
     public Object construct(Node node) { 
      final Map<Object, Object> values = constructMapping(node); 
      final String a = (String) values.get("a"); 
      final String b = (String) values.get("b"); 
      final String c = (String) values.get("c"); 
      return new CustomObject(a + ":" + b + "/" + c); 
     } 
    } 
} 

Sie es wie folgt verwenden können:

Yaml yaml = new Yaml(new CustomObjectConstructor()); 
CustomObject myObject = 
    (CustomObject) yaml.load("!customObject\na: 1\nb: 2\nc: 3"); 

Natürlich muss diese Ausgestaltung für Fehler der Bearbeitung von Fällen, aber es zeigt die allgemeine Idee. Um das Objekt als Mapping abzulegen, können Sie hier einen Repräsentanten ähnlich dem Code definieren. Weitere Informationen finden Sie unter documentation.

Verwandte Themen