Использование Джексона: получить дублированные поля в строке json

1

У меня есть POJO с аннотациями Джексона:

public class Person {
    @JsonProperty("first_name")
    private String firstName;

    @JsonProperty("last_name")
    private String lastName;

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return this.lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}

Затем я создал экземпляр Person и проанализировал его в строке json:

Person p = new Person();
p.setFirstName("John");
p.setLastName("Smith");

//parse to json string
ObjectMapper mapper = new ObjectMapper();
String personJson = mapper.writeValueAsString(p);

Но json string (personJson), который я получил, это следующее:

{"first_name":"John","last_name":"Smith","firstName":"John","lastName":"Smith"}

Почему я получаю дублированные поля " first_name " и " firstName ", поэтому для " last_name " и " lastName " в строке JSON?

===== UPDATE ===

Я также пробовал:

Аннотация:

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE,
        setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE,
        isGetterVisibility = JsonAutoDetect.Visibility.NONE)

ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
    mapper.getSerializationConfig().getDefaultVisibilityChecker()
            .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
            .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
            .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
            .withCreatorVisibility(JsonAutoDetect.Visibility.NONE);

Но я все еще получаю дублированные атрибуты в JSON в некоторых других POJO...

  • 0
    Протестировал этот код с помощью Jackson 2.3.2 - выходные данные: {"first_name":"John","last_name":"Smith"} . Кстати, Джексон перешел на github .
Теги:
jackson

1 ответ

4

Мне удалось решить проблему самостоятельно.

Причина, по которой я все еще получил дублированные поля в JSON после UPDATE, заключается в том, что в моем другом POJO есть логические свойства, которые дают методы доступа, начиная с " is ", например:

public class Other {
   @JsonProperty("money_paid")
   private boolean moneyPaid;

   public boolean isMoneyPaid() {
    return moneyPaid;
   } 
   ... 
}

Итак, сгенерированный json содержит {money_paid: true, moneyPaid: true}. Чтобы избавиться от него, я добавил еще одно ограничение на mapper когда setVisibilityChecker, который:

.withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню