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