Gibt es eine Möglichkeit, mit Jackson JSON Processor eine benutzerdefinierte Serialisierung auf Feldebene durchzuführen? Zum Beispiel möchte ich die Klasse haben
public class Person {
public String name;
public int age;
public int favoriteNumber;
}
serialisiert zu folgendem JSON:
{ "name": "Joe", "age": 25, "favoriteNumber": "123" }
Beachten Sie, dass age = 25 als Zahl codiert wird, während favorNumber = 123 als Zeichenfolge codiert wird . Aus der Box Jackson Marshalls int
zu einer Nummer. In diesem Fall möchte ich, dass favorNumber als Zeichenfolge codiert wird.
java
json
serialization
jackson
Steve Kuo
quelle
quelle
Antworten:
Sie können einen benutzerdefinierten Serializer wie folgt implementieren:
Java sollte das Autoboxing von
int
bisInteger
für Sie erledigen .quelle
as=String.class
wird aufgrund desusing
Parameters ignoriert und ist hier nicht erforderlich. Hinweis: Wenn using () ebenfalls verwendet wird, hat es Vorrang (da der Serializer direkt angegeben wurde, während dies nur zum Auffinden des Serializers verwendet wird), und der Wert dieser Annotationseigenschaft wird ignoriert.Person implements ToJson
?as=String.class
aufgrund der von mir verwendeten Typen sogar teilweise fehlgeschlagen . @ kevin-bowersox, ich schlage vor, Ihren Kommentar entsprechend den Aussagen von @GarethLatty zu aktualisieren.Jackson-Datenbindung (mindestens 2.1.3) bietet special
ToStringSerializer
(com.fasterxml.jackson.databind.ser.std.ToStringSerializer
)Beispiel:
quelle
Fügen Sie für das Feld einen mit
@JsonProperty
Anmerkungen versehenen Getter hinzu, der a zurückgibt :String
favoriteNumber
quelle
jackson-annotations bietet
@JsonFormat
eine Vielzahl von Anpassungen, ohne dass der benutzerdefinierte Serializer geschrieben werden muss.Wenn Sie beispielsweise eine
STRING
Form für ein Feld mit numerischem Typ anfordern, wird der numerische Wert als Zeichenfolge ausgegebenführt zu der gewünschten Ausgabe
quelle
Wenn Sie Ihr Modell nicht mit Anmerkungen verschmutzen und einige benutzerdefinierte Vorgänge ausführen möchten, können Sie Mixins verwenden.
Alter überschreiben:
Mach was du brauchst mit dem Alter:
quelle
Mit Hilfe von @JsonView können wir Felder von Modellklassen für die Serialisierung festlegen, die die Mindestkriterien erfüllen (wir müssen die Kriterien definieren), wie wir eine Kernklasse mit 10 Eigenschaften haben können, aber nur 5 Eigenschaften können serialisiert werden, die für den Client erforderlich sind nur
Definieren Sie unsere Ansichten, indem Sie einfach die folgende Klasse erstellen:
Kommentierte Modellklasse mit Ansichten:
Jetzt müssen wir einen benutzerdefinierten JSON-Konverter schreiben, indem wir einfach die HttpMessageConverter-Klasse ab dem Frühjahr wie folgt erweitern:
Jetzt muss spring angewiesen werden, diese benutzerdefinierte JSON-Konvertierung zu verwenden, indem diese einfach in dispatcher-servlet.xml eingefügt wird
Auf diese Weise können Sie entscheiden, welche Felder serialisiert werden sollen.
quelle