杰克逊不用@JsonProperty推翻盖特

2022-09-01 07:55:56

JsonProperty不会覆盖 jackson 从 getter 获得的默认名称。如果我用和杰克逊序列化下面的类,我得到ObjectMapper

{"hi":"hello"}

如您所见,JsonProperty 注释没有效果

class JacksonTester {
    String hi;

    @JsonProperty("hello")
    public String getHi() {
        return hi;
    }
}   

戴上字符串本身也不起作用。似乎我可以更改名称的唯一方法是重命名getter,唯一的问题是它总是第一个字母的小写。@JsonProperty


答案 1

问题是我同时使用了旧的和新的杰克逊库

也就是说,在我拥有之前,我必须将其更改为下面,以便与我正在使用的库保持一致。import org.codehaus.jackson.annotate.JsonProperty;

由于我使用的是 maven,这也意味着更新我的 maven 依赖项。import com.fasterxml.jackson.annotation.JsonProperty;

为了让它工作,我需要在getter上注释(把它放在对象上不起作用)@JsonProperty

我在这里找到了答案(感谢francescoforesti),@JsonProperty没有按预期工作


答案 2

如果使用 Kotlin

我知道最初的问题是在Java中,但是由于Kotlin变得非常流行,许多人可能会使用它,我想在这里发布这个来帮助其他人。

无论如何,对于 Kotlin 来说,因为 getters/setter 是如何工作的,如果你使用的是 ,这意味着你只公开 getter,你可能需要将注释应用到 getter,如下所示:val

class JacksonTester(@get:JsonProperty("hello") val hi: String)