JSON в POJO - игнорировать определенные вложенные свойства - PullRequest
0 голосов
/ 16 ноября 2018

Предположим, у меня есть объект JSON, который выглядит следующим образом

{
  "name":"John",
  "age":30,
  "someAttribute1": {
      "property1":"example1",
      "property2":"example2"
  },
  "someAttribute2": {
      "property1":"example1",
      "property2":"example2"
  }
}

и следующий класс POJO для чтения этой сущности в

@XmlRootElement      
public class Person {
  @XmlElement(name = "name")
  private String name;

  @XmlElement(name = "age")
  private int age;
}

Как получить поле property1someAttribute1 и поле property1 someAttribute2, без необходимости создания отдельного представления класса для somAttribute1 и someAttribute2?

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

То, как вы делаете это, используя Map<KeyType, ValueType>, например, в вашем случае Map<String, String> сделает всю работу.Код должен работать так:

@XmlRootElement      
public class Person {
  @XmlElement(name = "name")
  private String name;

  @XmlElement(name = "age")
  private int age;

  @XmlElement(name = "someAttribute2")
  private Map<String, String> someAttributeTwo;

  @XmlElement(name = "someAttribute1")
  private Map<String, String> someAttributeOne;
}
0 голосов
/ 16 ноября 2018

Вы можете использовать библиотеку Джексона для распаковки вложенного свойства, используя комбинацию @JsonProperty и некоторую пользовательскую логику в вашем классе.

    public class Person {
      private String name;
      private int age;
      private String someAttribute1Property1;
    }

    @SuppressWarnings("unchecked")
    @JsonProperty("someAttribute1")
    private void unpackNested(Map<String,Object> someAttribute1) {
        this.someAttribute1= (String)brand.get("Property1");
       -------
    }
}

Ссылка: https://www.baeldung.com/jackson-nested-values

0 голосов
/ 16 ноября 2018

В вашем примере то, что кажется подходящим для вашего случая, это добавить две переменные-члены hashmap в ваш класс Person, как показано ниже:

@XmlRootElement      
public class Person {
@XmlElement(name = "name")
private String name;

@XmlElement(name = "age")
private int age;
}

@XmlElement(name = "someAttribute1")
private HashMap<String,String> someAttribute1;
}

@XmlElement(name = "someAttribute2")
private HashMap<String,String> someAttribute2;
}
...