Есть ли способ заставить Джексона вызывать методы слушателя beforeMarshal до Jaxb перед сериализацией? - PullRequest
0 голосов
/ 25 июня 2019

Я хочу иметь возможность добавить обработчик для интерфейса ISerializationEventHandler и когда POJO имеет этот интерфейс, вызовите метод JAXB beforeMarshal.

Я знаю, что могу добавить аннотацию "@JsonProperty" к методу getModifierItemLine(), но это требует обновления загрузок сущностей в базе кода.

Сокращенная версия сущности

public abstract class Modifier implements IModifier, ISerializationEventHandler {

    /** Entity name. */
    public static final String ENTITY_NAME = "modifier";

    @XmlTransient
    private IModifierItem<?, ?> modifierItem = null;

    @XmlAttribute
    private Integer modifierItemLine = null;

    // ...... cut out other bits of code

    // Want this method to be called before serialisation
    public void beforeMarshal() {
        modifierItemLine = getModifierItemLine();
    }

    public int getModifierItemLine() {
        if (modifierItem != null) {
            return modifierItem.getLineNumber();  
        } else {
            return (modifierItemLine != null) ? modifierItemLine : 0;
        }
    }
}

Я пытался с использованием StdConverter, но это, похоже, меняет способ сериализации объекта по какой-то причине по сравнению с другими POJOs.

public class SerializationEventHandlerConverter extends StdConverter<ISerializationEventHandler, ISerializationEventHandler> {

    @Override
    public ISerializationEventHandler convert(ISerializationEventHandler value) 
    {
        value.beforeMarshal();
        return value;
    }
}
...