【问题标题】:How to Use @JsonProperty With Lombok?如何在 Lombok 中使用@JsonProperty?
【发布时间】:2022-11-08 04:06:26
【问题描述】:

假设我们有一个 json 响应,我们想将它映射到我们的 java 类。

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

我有一个数据类,将 json 中的 access_token 字段映射到代码中的 accessToken 字段。我曾经在 getter 和 setter 上使用 @JsonProperty 注释。

private String accessToken;

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

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

然后我决定使用Lombok注解@Getter@Setter。由于我的代码中没有 getter 和 setter,如何将 json 中的 access_token 字段映射到带有 Lombok 注释的代码中的 accessToken 字段?

我的代码现在就是这样,正如您所料,它无法映射字段。

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

我不想将我的变量命名为 access_token,因为我还将访问令牌作为 json 响应返回,并且我希望它在我的 json 响应中显示为 accessToken

谢谢你。

【问题讨论】:

    标签: java json lombok


    【解决方案1】:

    找到了一种方法来做到这一点。

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

    另一种解决方案是使用@JsonAlias 注释。

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

    【讨论】:

      【解决方案2】:

      不需要这一切,您可以简单地使用 @JsonProperty 注释您的字段。 Spring 仍将使用 getter 进行序列化。

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

      【讨论】:

        猜你喜欢
        • 2017-09-01
        • 2022-07-10
        • 2018-04-07
        • 2019-01-08
        • 2017-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-02
        相关资源
        最近更新 更多