Как получить значение @JsonProperty, используя Java и API Джексона? - PullRequest
1 голос
/ 04 ноября 2019

В одном из случаев в моем проекте я столкнулся со случаем, когда мне нужно выбрать имя JSONPropoerty для создания другого объекта json.

У меня есть класс pojo:

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

теперь в другом классе мне нужно создать объект JSON, используя имена свойств json, связанные с именами @JsonProperty класса pojo моего Record.

Я хочу что-то вроде

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

Есть ли способ получитьимена свойств json, связанные с именами полей java.

1 Ответ

1 голос
/ 04 ноября 2019

Несмотря на это, Jackson, имеет классы типа com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector, com.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, чтобы прочитать аннотацию из данного поля.

См. Также:

...