#java #spring #jackson #jackson-databind
#java #spring #джексон #jackson-databind
Вопрос:
С помощью jackson есть способ игнорировать некоторые поля с помощью @JsonIgnore
. Есть ли способ сделать обратное, и показывать только поля с аннотациями? Я работаю с внешним классом с большим количеством полей, и я хочу выбрать только небольшое подмножество из них. Я получаю массу проблем с рекурсией (используя некоторый тип ORM), где объект A -> B -> A -> B -> A …. которые даже не обязательно экспортировать.
Ответ №1:
Вы можете настроить средство сопоставления объектов так, чтобы оно игнорировало абсолютно все, если это не указано JsonProperty
,
public class JacksonConfig {
public static ObjectMapper getObjectMapper(){
//The marshaller
ObjectMapper marshaller = new ObjectMapper();
//Make it ignore all fields unless we specify them
marshaller.setVisibility(
new VisibilityChecker.Std(
JsonAutoDetect.Visibility.NONE,
JsonAutoDetect.Visibility.NONE,
JsonAutoDetect.Visibility.NONE,
JsonAutoDetect.Visibility.NONE,
JsonAutoDetect.Visibility.NONE
)
);
//Allow empty objects
marshaller.configure( SerializationFeature.FAIL_ON_EMPTY_BEANS, false );
return marshaller;
}
}
public class MyObject {
private int id;
@JsonProperty
private String name;
private Date date;
//Getters Setters omitted
в этом случае будет сериализован только name
.
Пример репозитория,https://github.com/DarrenForsythe/jackson-ignore-everything
Ответ №2:
Да, безусловно, вы можете; Создайте класс только с теми полями, которые вам нужны, и добавьте приведенное ниже свойство в object mapper, и все готово.
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES to false
Ответ №3:
Вы можете использовать @JsonIgnoreProperties(ignoreUnknown= true) в классе pojo, чтобы отобразить только те поля, которые доступны в классе pojo, а resf не учитывался.
Например
Данные в формате Json
{
"name":"Abhishek",
"age":30,
"city":"Banglore",
"state":"Karnatak"
}
класс pojo
@JsonIgnoreProperties(ignoreUnknown=true)
Class Person{
private int id;
private String name;
private String city;
}
Здесь укажите, что в классе Person отсутствует, чтобы это поле не отображалось