Jackon API с агрегированными объектами для преобразования из JSON в класс - PullRequest
0 голосов
/ 14 июля 2020

Как преобразовать Json в класс с помощью jackson api, если у нас есть следующие два класса Class1 и class 2:

public class NestedPOJO {
    

    String firstname;
        Integer age;
        Details detail;
        public String getFirstname() {
            return firstname;
        }
        public void setFirstname(String firstname) {
            this.firstname = firstname;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public Details getDetail() {
            return detail;
        }
        public void setDetail(Details detail) {
            this.detail = detail;
        }
}

    public class Details {
        String firstname;
        String lastname;
        public String getFirstname() {
            return firstname;
        }
        public void setFirstname(String firstname) {
            this.firstname = firstname;
        }
        public String getLastname() {
            return lastname;
        }
        public void setLastname(String lastname) {
            this.lastname = lastname;
        }
            
    }

Вот код API Джексона, который я использовал:

    NestedPOJO n = new NestedPOJO();
   ObjectMapper m = new ObjectMapper();
    n = m.readValue(new File(System.getProperty("user.dir") + "\\src\\test\\resources\\payload - Copy.json"), NestedPOJO.class);

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Я скопировал ваши классы и код, и он отлично работает. Возможно, ваш JSON неверен. Вот что я использовал: {"firstname": "fn", "age": 10, "detail": {"firstname": "fn", "lastname": "ln"}}

0 голосов
/ 14 июля 2020

Вы можете сделать что-то вроде этого:

ObjectMapper mapper = new ObjectMapper();
NestedPOJO nestedPOJO = mapper.readValue(loadDataAsString("payload - Copy.json"),NestedPOJO.class);

и вызвать метод ниже как loadDataAsString

/**
 * This method will help to load data from the respective JSON file.
 * @param dataRequestType String
 * @return String
 */
protected String loadDataAsString(String dataRequestType) {
    try {
        ClassLoader classLoader = ClassLoader.getSystemClassLoader();
        File file = new File(Objects.requireNonNull(classLoader.getResource(dataRequestType)).getFile());
        return new String(Files.readAllBytes(file.toPath()));
    } catch (IOException e) {
        //logger.error("Exception occurred during load data for {}", dataRequestType, e);
        e.printStackTrace();
    }
    return null;
}

Этот подход определенно сработает для вас. Если у вас возникла проблема относительно пути, исправьте ее самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...