У меня есть 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...
Мне удалось решить проблему самостоятельно.
Причина, по которой я все еще получил дублированные поля в 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)
{"first_name":"John","last_name":"Smith"}
. Кстати, Джексон перешел на github .