DATAREST-1060 - Improve AssociationOmittingSerializerModifier to not break on Jackson 2.9.

According to this upstream ticket [0] we need to override BeanSerializerModifier.changeProperties(…) rather than ….updateBuilder(…). The commit just does that.

[0] https://github.com/FasterXML/jackson-databind/issues/1664

Related ticket: FasterXML/jackson-databind#1664
This commit is contained in:
Oliver Gierke
2017-06-19 14:53:03 +02:00
parent 0640ff3c85
commit 585072a1b7

View File

@@ -84,7 +84,6 @@ import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializerBuilder;
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
import com.fasterxml.jackson.databind.ser.std.StdScalarSerializer;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
@@ -237,64 +236,63 @@ public class PersistentEntityJackson2Module extends SimpleModule {
/*
* (non-Javadoc)
* @see com.fasterxml.jackson.databind.ser.BeanSerializerModifier#updateBuilder(com.fasterxml.jackson.databind.SerializationConfig, com.fasterxml.jackson.databind.BeanDescription, com.fasterxml.jackson.databind.ser.BeanSerializerBuilder)
* @see com.fasterxml.jackson.databind.ser.BeanSerializerModifier#changeProperties(com.fasterxml.jackson.databind.SerializationConfig, com.fasterxml.jackson.databind.BeanDescription, java.util.List)
*/
@Override
public BeanSerializerBuilder updateBuilder(SerializationConfig config, BeanDescription beanDesc,
BeanSerializerBuilder builder) {
public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc,
List<BeanPropertyWriter> beanProperties) {
entities.getPersistentEntity(beanDesc.getBeanClass()).ifPresent(entity -> {
return entities.getPersistentEntity(beanDesc.getBeanClass()).map(entity -> {
List<BeanPropertyWriter> result = new ArrayList<BeanPropertyWriter>();
for (BeanPropertyWriter writer : builder.getProperties()) {
for (BeanPropertyWriter writer : beanProperties) {
Optional<? extends PersistentProperty<?>> findProperty = findProperty(writer.getName(), entity, beanDesc);
findProperty.ifPresent(it -> {
if (!findProperty.isPresent()) {
result.add(writer);
continue;
}
findProperty.flatMap(it -> {
if (associations.isLookupType(it)) {
LOG.debug("Assigning lookup object serializer for {}.", it);
writer.assignSerializer(lookupObjectSerializer);
result.add(writer);
return;
return Optional.of(writer);
}
// Is there a default projection?
if (associations.isLinkableAssociation(it)) {
return;
return Optional.empty();
}
// Skip ids unless explicitly configured to expose
if (it.isIdProperty() && !associations.isIdExposed(entity)) {
return;
return Optional.empty();
}
if (it.isVersionProperty()) {
return;
return Optional.empty();
}
if (it.isEntity() && !writer.isUnwrapping()) {
LOG.debug("Assigning nested entity serializer for {}.", it);
writer.assignSerializer(nestedEntitySerializer);
}
result.add(writer);
});
return Optional.of(writer);
if (!findProperty.isPresent()) {
result.add(writer);
}
}).ifPresent(result::add);
}
builder.setProperties(result);
});
return result;
return builder;
}).orElse(beanProperties);
}
/**