【问题标题】:How to get @JsonProperty 's value using java and jackson api?如何使用 java 和 jackson api 获取 @JsonProperty 的值?
【发布时间】:2019-11-04 14:25:23
【问题描述】:

在我的项目中的一个案例中,我遇到了需要获取 JSONPropoerty 名称来构建另一个 json 对象的案例。

我有一个 pojo 课:

 public class Records {
    @JsonProperty("NEWVALUE")
    private String new;
}

现在在另一个类中,我需要使用与我的 Record pojo 类的 @JsonProperty 名称关联的 json 属性名称来创建 JSON 对象。

我想要类似的东西

Record rec=new Record();
JsonNode tmpNode=new JsonNode();
String key= <somehow get value from rec object i.e. "NEWVALUE">
((ObjectNode) tmpNode).put(key, "abc"));

有没有办法获取与java字段名关联的json属性名。

【问题讨论】:

标签: java jackson jackson-databind


【解决方案1】:

即便如此,Jackson 也有 com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospectorcom.fasterxml.jackson.databind.introspect.AnnotatedField 等类...如果真的不需要,我建议不要使用。它们具有非常复杂的API 并且仅适用于您需要以某种方式创建的来自com.fasterxml.jackson.databind.introspect 的对象。

最简单的解决方案是创建public static final 字段并在另一个类中使用:

class Records {

    public static final String NEW_VALUE = "NEWVALUE";

    @JsonProperty(NEW_VALUE)
    private String value;
}

你可以像下面这样使用它:

((ObjectNode) tmpNode).put(Records.NEW_VALUE, "abc"));

或者,只需使用Reflection 从给定字段读取注释。

另见:

【讨论】:

  • 是的,这是使用公共静态最终字段的好方法。
  • 关于设置名称值而不是使用反射的好建议。
猜你喜欢
  • 2022-08-19
  • 1970-01-01
  • 2020-06-22
  • 2016-05-07
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 2018-03-21
  • 2019-09-14
相关资源
最近更新 更多