Search code examples
javamavenjackson-databind

why are these Jackson annotations necessary?


I am making a REST call and using Jackson to parse the response.

In cases where JSON attributes and Java field names don't match I need supply a @JsonProperty annotation. However in other applications I've written with earlier versions of Jackson, where JSON and Java match no annotation is needed.

@JsonIgnoreProperties(ignoreUnknown = true)
public class Location {

    @JsonProperty(value="i")
    String id;

    // unless I include this annotation the name is not deserialised.
    @JsonProperty(value="name")
    String name;
    
    // etc.
}

Why would I need to specify that seemingly redundant mapping?

I am using Maven and my effective pom shows

 <jackson-bom.version>2.12.4</jackson-bom.version>

I specify

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.32</version>
</dependency>

Solution

  • Jackson looks for attributes based on the getters of the class and not by its fields unless they are explicitly annotated.

    Define a String getName() method and you won't need the annotation