Пользовательский фильтр Джексона с полной привязкой данных POJO

Этот вопрос расширяет этот вопрос.

Хотя предыдущее решение отлично работает, если у вас есть только пара полей, оно становится неудобным, когда у вас больше дюжины полей. Прямо сейчас моя текущая настройка использует полную привязку данных, поэтому у меня есть POJO, который Джексон будет использовать для автоматической десериализации JSON.

Однако, как и прежде, некоторые поля имеют ограничения, которые необходимо пройти. По сути, я ищу ответ, похожий на это, но без необходимости устанавливать какие-либо свойства. Просто настраиваемый десериализатор, который будет действовать как фильтр и выдавать настраиваемое исключение, если поле не соответствует ограничению. Если к концу фильтра исключений не возникло, Джексон должен автоматически связать JSON с POJO.


person THIS USER NEEDS HELP    schedule 20.09.2016    source источник


Ответы (3)


Похоже, что схема Json может соответствовать вашим потребностям. Это позволяет использовать гибкие (и сложные) правила проверки строк json перед их десериализацией. Он включает в себя обязательные поля, проверку значений на основе регулярных выражений, стандартные отраслевые форматы (например, вы можете определить поле как формат «электронной почты»), зависимости между полями (в последней версии 4) и т. д.

Вышеупомянутый стандарт не зависит от языка. Что касается реализации Java, я использовал этот, который поддерживает последнюю версию схемы json (стандарт все еще развивается). Первоначальная интеграция валидатора потребовала много работы (из-за моей очень динамичной модели json), но после этого очень удобно ввести новые правила проверки (просто нужно изменить файл схемы json)

person Sharon Ben Asher    schedule 21.09.2016
comment
Хм, мне было интересно, смогу ли я сделать это без введения новых зависимостей. Вы бы знали, есть ли у Джексона такая функциональность? - person THIS USER NEEDS HELP; 23.09.2016
comment
это не так. Я не знаю какой-либо другой библиотеки с возможностями проверки json. - person Sharon Ben Asher; 25.09.2016

Я бы рекомендовал разделить проблемы десериализации и проверки с помощью Jackson и Hibernate Vaildator соответственно. Идея состоит в том, чтобы сначала десериализовать данные json в POJO, а затем проверить POJO в соответствии с требованием. В вашем случае вы можете применить Ограничения уровня класса для проверки. Ограничения на уровне класса обладают большой гибкостью и могут проверять несколько взаимосвязанных свойств путем доступа к экземпляру объекта. Это просто, но мощно.

Обычно проверка требует более высокого уровня проблем. Лучше заниматься этим после дериализации. Это может упростить управление и повторное использование кода POJO и правил проверки.

person Wilson    schedule 01.10.2016

просто подумайте: если вам не нужна проверка во время десериализации, попробуйте аннотацию @JsonIgnoreProperties(ignoreUnknown = true) для вашего класса POJO. Вы можете выполнить проверку позже, когда реальная бизнес-логика работает с классами pojo.

person Olesia    schedule 30.09.2016