有没有一种方法可以让Jackson在序列化之前调用Jaxb的beforeMarshal监听器方法?

时间:2019-06-25 13:54:50

标签: java json jackson jaxb

我希望能够为接口添加处理程序 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;
        }
    }
}

我已经尝试过,但与其他POJOs相比,这似乎出于某种原因改变了实体序列化的方式。

public class SerializationEventHandlerConverter extends StdConverter<ISerializationEventHandler, ISerializationEventHandler> {

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

0 个答案:

没有答案