Jackson json конвертирует только выбранные поля и методы

#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 отсутствует, чтобы это поле не отображалось