Когда @JsonProperty переименовывает поле объекта? - PullRequest
1 голос
/ 19 сентября 2019
@Data
public class Tests {
    @JsonProperty("comment")
    private String notes;
}

Я знаю, как использовать @JsonProperty для переименования поля в другое имя, но когда оно переименовывает поле объекта?Например, notes переименовано в comment.Я пытаюсь прочитать исходный код и обнаружил, что в com.fasterxml.jackson.databind.ser.std.BeanSerializerBase#serializeFields и com.fasterxml.jackson.databind.ser.BeanPropertyWriter#serializeAsField есть некоторый относительный код.Но поле уже переименовано в comment.Так где же @JsonProperty переименовать поле объекта?

Ответы [ 2 ]

4 голосов
/ 19 сентября 2019

Разрешение имени свойства происходит в com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector Посмотрите на этот фрагмент:

public PropertyName findNameForDeserialization(Annotated a) {
    ...
    // Get JsonProperty value for the field
    JsonProperty pann = (JsonProperty)this._findAnnotation(a, JsonProperty.class);
    if (pann != null) {
        // here we are !!!
        return PropertyName.construct(pann.value());
    } else {
        return !useDefault && !this._hasOneOf(a, ANNOTATIONS_TO_INFER_DESER) ? null : PropertyName.USE_DEFAULT;
    }
}

Все это происходит в POJOPropertiesCollector.collectAll()

2 голосов
/ 19 сентября 2019

Я создал простой класс Pojo

public class JsonTest {
  @JsonProperty("greetings")
  String hello;
}

и запустил метод ObjectMapper # writeValueAsString.После некоторой отладки я обнаружил, что Джексон переименовывает имя свойства следующим способом.

com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector#_renameProperties
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...