2017-05-29 4 views
0

Ich habe ein Objekt mit benutzerdefinierten Getter, die Business-Logik basierend auf Konstruktor Argumente, z.Jackson deserialize in synästhetische Klasse

class Test { 
    private int number; 
    Test(int number) { 
     this.number = number; 
    } 

    public boolean isEven() { 
     return number % 2 == 0; 
    } 
} 

die als {"even": true}

serialisiert wird ich dieses Objekt deserialisieren möchte, so dass ein Proxy erstellt wird, basierend auf dem Wert serialisierten ISEVEN() gibt. Ist so etwas mit Jackson möglich?

+0

Warum deserialisieren es nicht zu einem 'java.util.Map' und lesen nur' map.get ("even ")"? Wenn Sie die Methode 'isEven' aufrufen möchten, müssten Sie diese kompilieren, was auch rechtfertigen könnte, einfach eine Klasse zu schreiben, um JSON als deserialisieren zu können. –

+0

@ErnestKiwele Ich habe ein komplexes Objektmodell und dieses Modell wird in anderen Teilen des Codes verwendet. Daher müssen die Objekttypen unbedingt unverändert bleiben. –

Antwort

0

Wenn ich die Frage verstanden, das ist möglich mit eigenschaftsbasierte statische @JsonCreator Methode:

public class Test { 
    private int number; 
    ... 

     @JsonCreator 
     public static Test fromJson(@JsonProperty("even") Boolean isEven) { 
      return new Test(isEven ? 2 : 1); 
     } 
} 
+0

Das obige Beispiel war ein Spielzeugbeispiel, in meinem realen Anwendungsszenario wäre ich nicht in der Lage, einen solchen umgekehrten "Hack" anzuwenden ('isEven? 2: 1'). –

+0

In diesem Beispiel wird gezeigt, wie Sie Jackson dazu bringen können, eine Methode mit Eingabe von json aufzurufen und sie in ctor-Argumente zu übersetzen –

Verwandte Themen