На данный момент нет какой-либо конкретной функции для пост- или предварительной обработки; и этот вид приближается к границам того, что должна делать привязка данных.
Если бы мне пришлось сделать это для определенных полей, я бы, вероятно, просто добавил бы это в setter, так как это просто и работает; но требует одинаковой логики во всех соответствующих установщиках.
@ JsonDeserialize также можно использовать для отдельных свойств (поле, установщик), так что вы можете создать собственный десериализатор: и так как вы хотите постобработку, вы можете просто найти «настоящий» десериализатор (в идеале, сделав JsonDeserializer
реализовать либо ContextualDeserializer
, либо ResolvableDeserializer
- здесь это может не иметь значения, но в общем случае это делается здесь, чтобы избежать проблем с циклическими зависимостями), делегируйте его и измените значение. Это предполагает, что это значение, о котором вы заботитесь больше, чем поле.
Наконец, есть также способы изменения BeanDeserializer
экземпляров (путем регистрации BeanDeserializerModifier
) - вы можете подклассы соответствующих компонентов (я думаю, SettableBeanProperty ...) подключить дополнительную обработку или даже заменить десериализатор на использовать, сохраняя ссылку на оригинальный десериализатор по умолчанию.
Но, в конце концов, ваш случай звучит как что-то, что лучше всего обрабатывается чем-то другим: например, API Bean Validation (jsr-303) кажется потенциально хорошим соответствием для логики постобработки. Так как это несколько ортогонально к привязке данных, это может быть превосходной альтернативой, поскольку оно не зависит от привязки данных (Джексон), может быть использовано много раз.