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 bekommenHier 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?
Sie können einen XmlAdapter mit JAXB verwenden, um unveränderliche Objekte zu behandeln:
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!
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.
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).