Ich rufe eine JSON-Zeichenfolge aus dem Internet ab. Wie die meisten JSON, die ich gesehen habe, enthält es lange Schlüssel, die durch Unterstriche getrennt sind. Im Wesentlichen ist mein Ziel, JSON in Java-Objekte zu deserialisieren, aber ich verwende keine Unterstriche in Java-Code.
Zum Beispiel könnte ich eine User
Klasse mit firstName
Feld in Kamel-Fall haben, gleichzeitig muss ich Jackson irgendwie anweisen, den first_name
Schlüssel von JSON dem firstName
Klassenfeld zuzuordnen . Ist es möglich?
class User{
protected String firstName;
protected String getFirstName(){return firstName;}
}
Sie können das so konfigurieren
ObjectMapper
, dass Kamelkoffer in Namen mit einem Unterstrich umgewandelt werden:Oder kommentieren Sie eine bestimmte Modellklasse mit dieser Anmerkung:
Vor Jackson 2.7 wurde die Konstante benannt:
quelle
@JsonProperty
(Name abgeleitet von normalencamelCase
Java-Eigenschaften) kommentiert wurdenPropertyNamingStrategy.SNAKE_CASE
, funktioniert die Deserialisierung nicht mehr mit camelCase JSON (wie ich es verwendet habe) und erfordert snake_case.Wenn es sich um eine Spring-Boot-Anwendung handelt, verwenden Sie in der Datei application.properties einfach
Oder Kommentieren Sie die Modellklasse mit dieser Anmerkung.
quelle
spring.jackson.property-naming-strategy=SNAKE_CASE
funktioniert nicht, ich benutze Spring Boot 2.0ObjectMapper
nicht vom Frühling erschaffen? Erstellen Sie eine @ Configuration-Klasse mit einer @ Bean-Methode, die einen ObjectMapper zurückgibt. Ich bin mir nicht sicher, ob dies notwendig ist.Wenn Sie dies für eine einzige Klasse wollen, können Sie das verwenden PropertyNamingStrategy mit dem @JsonNaming , etwa wie folgt:
Wird serialisiert zu:
Da
Jackson 2.7
dasLowerCaseWithUnderscoresStrategy
in zugunsten von veraltet istSnakeCaseStrategy
, sollten Sie also verwenden:quelle
Die obigen Antworten zu
@JsonProperty
undCAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
sind 100% genau, obwohl einige Leute (wie ich) möglicherweise versuchen, dies in einer Spring MVC-Anwendung mit codebasierter Konfiguration zu tun. Hier ist ein Beispielcode (den ich im Inneren habeBeans.java
), um den gewünschten Effekt zu erzielen:quelle
application.properties
zusätzlichspring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
. Verwenden Siespring.jackson.property-naming-strategy=SNAKE_CASE
stattdessen für Spring Boot 1.4 .final ObjectMapper objectMapper = new ObjectMapper().setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE);
Die derzeit beste Vorgehensweise besteht darin, Jackson innerhalb von
application.yml
(oder) zu konfigurierenproperties
) Datei .Beispiel:
Wenn Sie komplexere Konfigurationsanforderungen haben, können Sie Jackson auch programmgesteuert konfigurieren.
quelle
Hier gibt es nur wenige Antworten, die beide Strategien für zwei verschiedene Versionen der Jackson-Bibliothek angeben:
Für Jackson 2.6. *
Für Jackson 2.7. *
quelle