yrazlik
yrazlik

Reputation: 10787

How to Use @JsonProperty With Lombok?

Suppose we have a json response that we want to map it to our java class.

{
    "access_token": "abcdefg..."
}

I had a data class that mapped access_token field in the json to accessToken field in the code. I used to use @JsonProperty annotation on getters and setters.

private String accessToken;

@JsonProperty("accessToken")
public String getAccessToken() {
    return accessToken;
}

@JsonProperty("access_token")
public void setAccessToken(String accessToken) {
    this.accessToken = accessToken;
}

Then I decided to use Lombok annotations @Getter and @Setter. Since I do not have a getter and setter in my code, how can I map access_token field in the json to accessToken field in the code with Lombok annotations?

My code is like this right now and as you can expect, it cannot map the fields.

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Token {
    private String accessToken;
}

I do not want to name my variable to access_token because I also return access token as a json response and I want it to appear as accessToken in my json response.

Thank you.

Upvotes: 4

Views: 8817

Answers (2)

dev
dev

Reputation: 69

No need for all this, you can simply annotate your field with @JsonProperty. Spring will still use the getters for serialization.

@Data
public class Token {
   @JsonProperty("access_token")
   private String accessToken;
}

Upvotes: 4

yrazlik
yrazlik

Reputation: 10787

Found a way to do it.

@NoArgsConstructor
@AllArgsConstructor
public class Token {
    @Setter(onMethod = @__(@JsonSetter(value = "access_token"))) 
    @Getter(onMethod = @__(@JsonGetter(value = "accessToken"))) 
    private String accessToken;
}

Another solution is to use @JsonAlias annotation.

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Token {
    @JsonAlias("access_token"))) 
    private String accessToken;
}

Upvotes: 6

Related Questions