无法使用 Jackson 将下划线大小写转换为驼峰大小写

Not able to convert underscore case to camel case with Jackson

我有一个 DTO class 有一个 属性 像:

@JsonIgnoreProperties(ignoreUnknown = true)
public class WPPostResponse {
    @JsonProperty("featuredMedia")
    Long featured_media;

    public Long getFeatured_media() {
        return featured_media;
    }

    public void setFeatured_media(Long featured_media) {
        this.featured_media = featured_media;
    }
}

输入 JSON 有键 featured_media。我将 JSON 字符串转换为对象,然后将其作为 JSON 发送到客户端响应。我希望最终响应 JSON 具有 featuredMedia 作为键。然而,我得到 null 作为价值。如果我删除 JsonProperty,它会给出值,但键有下划线。如何解决这个问题?谢谢。

您可以在 setter 和 getter 上使用 JsonProperty 在序列化和反序列化期间使用不同的命名

@JsonIgnoreProperties(ignoreUnknown = true)
public class WPPostResponse {

   Long featuredMedia;

   @JsonProperty("featuredMedia")    // output will be featuredMedia
   public Long getFeatured_media() {
       return featuredMedia;
   }

   @JsonProperty("featured_media")    // input should be featured_media
   public void setFeatured_media(Long featured_media) {
       this.featuredMedia = featured_media;
   }
}

并且您还将访问级别设置为 @JsonProperty 注释

@JsonProperty(value = "featured_media", access = JsonProperty.Access.WRITE_ONLY)

始终遵守 Java 代码中的 Java 命名约定。使用注释处理 Json 不尊重它们。

在这种情况下,使用 JsonAlias

Annotation that can be used to define one or more alternative names for a property, accepted during deserialization as alternative to the official name

public class WPPostResponse {
    @JsonAlias("featured_media")
    Long featuredMedia;

    public Long getFeaturedMedia() {
        return featuredMedia;
    }

    public void setFeaturedMedia(Long featuredMedia) {
        this.featuredMedia = featuredMedia;
    }
}