Deserialize JSON для Java с использованием Jackson 2

У меня есть JSON:

{"evaluationPart": {
    "generatedId": "48D5181DB8704F8AB5FC998964AD9075",
    "evaluationQuestionPartOption": {
        "generatedId": "48D5181DB8704F8AB5FC998964AD9075"
    }
}}

Я создал классы Java для его представления:

Класс root:

@JsonIgnoreProperties(value = {"evaluationPart"})
public class JsonEvaluationPart {

    @JsonProperty("generatedId")
    private String generatedId;

    @JsonProperty("evaluationQuestionPartOption")
    private JsonQuestionOption questionOption;

    public String getGeneratedId() {
        return generatedId;
    }

    public void setGeneratedId(String generatedId) {
        this.generatedId = generatedId;
    }

    public JsonQuestionOption getQuestionOption() {
        return questionOption;
    }

    public void setQuestionOption(JsonQuestionOption questionOption) {
        this.questionOption = questionOption;
    }
}

И класс JsonQuestionOption :

public class JsonQuestionOption {

    @JsonProperty("generatedId")
    private String generatedId;

    public String getGeneratedId() {
        return generatedId;
    }

    public void setGeneratedId(String generatedId) {
        this.generatedId = generatedId;
    }
}

Я написал небольшой тест JUnit, чтобы проверить, как это происходит:

public class JsonReaderTest {

    /**
     * Logger for this class.
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(JsonReaderTest.class);

    private ObjectMapper objectMapper;

    private static final String JSON = "{\"evaluationPart\": {\n" +
            "    \"generatedId\": \"48D5181DB8704F8AB5FC998964AD9075\",\n" +
            "    \"evaluationQuestionPartOption\": {\n" +
            "        \"generatedId\": \"48D5181DB8704F8AB5FC998964AD9075\"\n" +
            "    }\n" +
            "}}";

    @Before
    public void setUp()
            throws Exception {
        LOGGER.debug("Creating the object mapper.");
        objectMapper = new ObjectMapper();
        LOGGER.debug("Object mapper successfully created. {}", objectMapper);
    }

    @Test
    public void testJsonReader()
            throws Exception {

        JsonEvaluationPart partType = objectMapper.readValue(JSON, JsonEvaluationPart.class);
        assertNotNull(partType);

        LOGGER.debug("Part: {}.", partType);

        assertEquals(partType.getGeneratedId(), "48D5181DB8704F8AB5FC998964AD9075");
        assertEquals(partType.getQuestionOption().getGeneratedId(), "48D5181DB8704F8AB5FC998964AD9075");
    }

}

Проблема в том, что когда я читаю свой JSON вот так:

JsonEvaluationPart partType = objectMapper.readValue(JSON, JsonEvaluationPart.class);

Все свойства в partType : null . Что я здесь делаю неправильно и как это решить?

1
nl ja de

2 ответы

Согласно документации JsonIgnoreProperties означает:

Annotation that can be used to either suppress serialization of properties 
(during serialization), or ignore processing of JSON properties read (during 
deserialization).

Просто попробуйте заменить:

@JsonIgnoreProperties(value = {"evaluationPart"}) 

с:

@JsonTypeName("evaluationPart") 
2
добавлено
Это из-за JSON/model. Просто создайте класс, например public class JsonEvaluationPartWrapper {private JsonEvaluationPart jep; } : вот что соответствует вашему JSON!
добавлено автор Jean Logeart, источник
Если я его изменю, я получаю это исключение: тогда я получаю это исключение: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyExcep & zwnj; tion: нераспознанное поле "evaluationPart" (класс com.company.core.json. JsonEvaluationPart), не отмеченные как невежественные (2 известных свойства:, «generatedId», «оценкаQuestionPartOption»])
добавлено автор user1759136, источник
Вау, это сработало :) Спасибо.
добавлено автор user1759136, источник

Ваши Json Headers ошибаются. использование

@JsonTypeName("evaluationPart") 

вместо

@JsonIgnoreProperties(value = {"evaluationPart"})
0
добавлено
Ваш Json нестандарт. Используйте «{\ n" + "\" generatedId \ ": \" 48D5181DB8704F8AB5FC998964AD9075 \ ", \ n" + "\" оценкаQuestionPartOption \ ": {\ n" + "\" generatedId \ ": \" 48D5181DB8704F8AB5FC998964AD9075 \ "\ n "+"} \ n "+"} "
добавлено автор Manoj, источник
Тогда я получаю это исключение: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyExcep & zwnj; tion: нераспознанное поле "оценкаPart" (класс com.company.core.json.JsonEvaluationPart), не помеченное как невежественное (2 известных свойства:, "generatedId", "оценкаQuestionPartOption"])
добавлено автор user1759136, источник
Вы знаете, что может вызвать это исключение?
добавлено автор user1759136, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async