Jackson 没有使用 @JsonProperty 覆盖 Getter

新手上路,请多包涵

JsonProperty 没有覆盖 jackson 从 getter 获取的默认名称。如果我用 ObjectMapper 和 jackson 序列化下面的类,我得到

{"hi":"hello"}

如您所见,JsonProperty 注释无效

class JacksonTester {
    String hi;

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

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

原文由 tt_Gantz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 896
2 个回答

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

即在我有 import org.codehaus.jackson.annotate.JsonProperty; 之前,我必须将其更改为以下内容,以与我使用的库保持一致。

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

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

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

原文由 tt_Gantz 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果使用 Kotlin

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

无论如何,对于 Kotlin,因为 getters/setters 是如何工作的,如果你正在使用 val ,这意味着你只公开 getter,你可能需要像下面这样对 getter 应用注释:

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

原文由 Francisco C. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题