at com.fasterxml.jackson.databind.ser.impl.WritableObjectId.writeAsField(WritableObjectId.java:64)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase._serializeWithObjectId(BeanSerializerBase.java:596)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:148)
public class SerializationTest {
private static final String REFID_PROPERTY = "ref-id";
public static abstract class AbstractSkippable {
private String someData;
public abstract boolean hasData();
public String getSomeData() {
return someData;
}
public void setSomeData(String someData) {
this.someData = someData;
}
}
@JsonIdentityReference
@JsonIdentityInfo(property = REFID_PROPERTY, generator = ObjectIdGenerators.UUIDGenerator.class)
public static class Data extends AbstractSkippable {
@Override
public boolean hasData() {
return true;
}
}
public static class MyData {
private Data data1;
private Data data2;
public Data getData1() {
return data1;
}
public void setData1(Data data1) {
this.data1 = data1;
}
public Data getData2() {
return data2;
}
public void setData2(Data data2) {
this.data2 = data2;
}
}
public static class AbstractSkippableSerializer extends JsonSerializer<AbstractSkippable> {
private final JsonSerializer<Object> defaultSerializer;
public AbstractSkippableSerializer(JsonSerializer<Object> defaultSerializer) {
if (defaultSerializer == null) {
throw new IllegalArgumentException("defaultSerializer must not be null");
}
this.defaultSerializer = defaultSerializer;
}
@Override
public void serialize(AbstractSkippable value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
defaultSerializer.serialize(value, gen, serializers);
}
@Override
public boolean isEmpty(SerializerProvider provider, AbstractSkippable value) {
return value == null || !value.hasData();
}
}
public static class SkippableSerializerModifier extends BeanSerializerModifier {
@Override
public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) {
Class<?> beanClass = beanDesc.getBeanClass();
if (AbstractSkippable.class.isAssignableFrom(beanClass)) {
@SuppressWarnings("unchecked")
JsonSerializer<Object> defaultSerializer = (JsonSerializer<Object>) serializer;
return new AbstractSkippableSerializer(defaultSerializer);
}
return serializer;
}
}
@Test
public void test() throws JsonProcessingException {
JacksonXmlModule mod = new JacksonXmlModule();
mod.setSerializerModifier(new SkippableSerializerModifier());
XmlMapper mapper = new XmlMapper(mod);
MyData myData = new MyData();
Data data = new Data();
data.setSomeData("data");
myData.setData1(data);
myData.setData2(data);
String xml = mapper.writeValueAsString(data);
System.out.println(xml);
}
}
@Overridepublic void resolve(SerializerProvider serializerProvider) throws JsonMappingException {
if (defaultSerializer instanceof ResolvableSerializer) {
((ResolvableSerializer) defaultSerializer).resolve(serializerProvider);
}
}
@Override
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
System.out.println("Property: " + property);
return defaultSerializer;
}Too bad wrt 2.7.9, although I am curious as to why you think you had
to use 2.7.4?
Patch releases are API-compatible with each other and there should not
be any reason why you
would need to align patches. This is different from major and minor
releases that should definitely match (major must,
minor versions should, although some of adjacent minor versions may work).
It will be `null` for "root value" serializer: the value given to
mapper which is not referenced by
a property. But since contextualization may still be needed (as it may
differ from serializers used for
values referenced by a property), method is still called.
you would need to delegate this similarly, and this is usually more
important of the two.
Did it not get called at all?
Hello from the future !I've ran into this issue but I don't understand what you guys meant by "Delegating to the default serializer" ?
Thanks in advance,Yohan
--
You received this message because you are subscribed to the Google Groups "jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jackson-user...@googlegroups.com.
To post to this group, send email to jackso...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jackson-user/a0b02f70-8256-414c-834f-60fcbce1fda6%40googlegroups.com.