Der beste Ansatz zum Marshalling von unveränderbaren Objekten mit Builder-Muster

8

Ich habe einen einfachen, erholsamen Service, den ich in Java entwickle. Ich habe ein paar der Optionen für Marshalling / Unmarshalling JSON untersucht. Die möglichen Ansätze, jaxb jackson usw., sind ziemlich neu für mich und ich versuche, meine Füße mit ihnen zu finden. Ich habe mich gefragt, ob ich einen Ratschlag bekommen könnte, was der beste Ansatz und die beste Technologie wäre, insbesondere da viele der Objekte, an denen ich interessiert bin, als unveränderlich implementiert wurden und ich das Builder-Muster verwendet habe. Es gibt also keine Setter und der Konstruktor ist privat.

Ich habe diese vorherige Frage angeschaut: Jackson + Builder Pattern? wurde auf stackoverflow gepostet. Ich denke über etwas wie diesen Ansatz nach, obwohl es großartig wäre, einige Hinweise auf mehr Ressourcen über die Verwendung von @JsonDeserialize

zu bekommen

Hier ist ein sehr einfaches Beispiel für den Objekttyp, den ich in Betracht ziehe

%Vor%

}

Es gibt keine Probleme beim Marshallen dieses Objekts, aber das Unmarshalling scheint nicht einfach zu sein. Gibt es auch Unterstützung zum Auslassen von Einträgen für Objektwerte, die Null sind?

    
Conor 14.06.2011, 10:51
quelle

5 Antworten

2

Sie können einen XmlAdapter mit JAXB verwenden, um unveränderliche Objekte zu behandeln:

Blaise Doughan 14.06.2011, 12:37
quelle
6

Sie können dies tun: (Implementieren Sie nur Getter und verwenden Sie XmlAccessType.FIELD)

%Vor%

entnommen aus Ссылка

    
ekeren 14.06.2011 18:36
quelle
1

Um es einfach zu machen: Gehen Sie nicht dorthin. Nur Wertobjekte sollten von Jersey / Jackson serialisiert / deserialisiert werden, und es gibt keinen Grund, sie unveränderlich zu machen, weil es keinen gemeinsamen Zugriff darauf gibt (sollte sein).

i.e. Jeder Serviceaufruf sollte ein neues Value-Objekt generieren, das anderen Threads nicht zur Verfügung steht. Auf diese Weise müssen Sie sich nicht um die Unveränderlichkeit kümmern und können daher den Standard-Weg mit Getter und Setter verwenden.

Machen Sie das Leben nicht unnötig kompliziert, wenn es Ihnen nichts kauft!

    
Sean Patrick Floyd 14.06.2011 11:19
quelle
0

Wenn Sie etwas marshalling / unmarshilling wollen, können Sie JAXB verwenden, wenn Sie eine XML-Ausgabe wollen, sonst würde ich für JSON lieber Fassaden hinzufügen, die den JSON String in Objekte konvertieren.

und das bedeutet, dass jeder Thread seine eigene Instanz von Facade hat, so dass es keinen Sinn für Unveränderbarkeit geben wird und wenn du das Facade Singleton erstellen willst, dann wird es auch kein Problem geben.

Wenn Sie JSON verwenden, können Sie eigene Logik schreiben, um ein Objekt zu erstellen, dh Sie können Konstruktor oder Setter verwenden. Wenn Sie die oben genannten Funktionen verwenden, können Sie mit Facade auch Unterklassen und alle unter derselben Fassade unterstützen.

    
M.J. 14.06.2011 11:50
quelle
0

Für das, was es wert ist, gibt es Pläne (aber keinen fertigen Code), um den Builder-Stil für die Deserialisierung zu unterstützen (gemäß dies Jira-Eintrag ). Wann immer es implementiert wird, hängt von der Anzahl der Personen ab, die an dem Problem arbeiten (oder zumindest Interesse bekunden).

    
StaxMan 14.06.2011 17:34
quelle

Tags und Links