Итак, название в основном описывает то, что мне нужно. Скажем, фасоль сериализовать выглядит следующим образом:Jackson add custom field with hash другого поля
public class SomeBean {
public String someString;
}
Я хотел бы Джексон сериализовать экземпляр SomeBean как это:
{
someString: '<the value>',
__hash_someString: '<a proprietary hash of <the value>>'
}
Эта функциональность должна быть общей. Я не хочу писать определенный сериализатор для SomeBean, потому что это должно произойти в нескольких местах. Невозможно добавить ' __hash_someString' к самому классу, потому что это будет загрязнять модель.
Реализация
Я хотел бы Джексон обработать боб обычно. Но когда он сталкивается с конкретной аннотацией ( @GenerateHash), он должен добавить другое поле к объекту, как раньше. Так что хотелось бы это:
public class SomeBean {
@GenerateHash
public String someString;
}
Дорога до сих пор
Есть много подобных тем, но ни один из них не пытаются что-то вроде этого. Я не занимаюсь внутренней работой Jackson Serialization, но кажется, что вы только получаете возможность модифицировать объект в целом. Я не нашел способа перехватить процесс сериализации поля, только значение этого поля.
Я попытался реализовать это с помощью BeanSerializerModifier, а также пробовал некоторые вещи с помощью @Serializer. Тем не менее, я обычно оказываюсь в бесконечном цикле.
Ресурсы Я консультировался являются (не ограничиваясь ими):
- Jackson: How to add custom property to the JSON without modifying the POJO
- Jackson - custom serializer that overrides only specific fields
- Jackson JSON custom serialization for certain fields
- How do I call the default deserializer from a custom deserializer in Jackson
- http://techtraits.com/programming/2011/11/21/using-custom-serializers-with-jackson/
Короче Как я могу получить Джексон сериализовать
public class SomeBean {
@GenerateHash
public String someString;
public String unaffectedString;
}
к этому:
{
someString: '<the value>',
__hash_someString: '<a proprietary hash of <the value>>',
unaffectedString: '<some value>'
}
работает как шарм! Спасибо. Думаю, я пропустил это, потому что мы работаем на более старой версии Jackson (2.0). Немедленно обновляется. – sdegroot