Issue
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.
Solution
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;
}
Answered By - yrazlik
Answer Checked By - Mary Flores (JavaFixing Volunteer)