Skip to content

Commit

Permalink
Support Jackson filters in combination with serialization view
Browse files Browse the repository at this point in the history
Issue: SPR-17209
  • Loading branch information
jhoeller committed Aug 24, 2018
1 parent 7056808 commit 03f1920
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 22 deletions.
Expand Up @@ -256,10 +256,11 @@ protected void writeInternal(Object object, @Nullable Type type, HttpOutputMessa
try {
writePrefix(generator, object);

Object value = object;
Class<?> serializationView = null;
FilterProvider filters = null;
Object value = object;
JavaType javaType = null;

if (object instanceof MappingJacksonValue) {
MappingJacksonValue container = (MappingJacksonValue) object;
value = container.getValue();
Expand All @@ -269,15 +270,11 @@ protected void writeInternal(Object object, @Nullable Type type, HttpOutputMessa
if (type != null && TypeUtils.isAssignable(type, value.getClass())) {
javaType = getJavaType(type, null);
}
ObjectWriter objectWriter;
if (serializationView != null) {
objectWriter = this.objectMapper.writerWithView(serializationView);
}
else if (filters != null) {
objectWriter = this.objectMapper.writer(filters);
}
else {
objectWriter = this.objectMapper.writer();

ObjectWriter objectWriter = (serializationView != null ?
this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
if (filters != null) {
objectWriter = objectWriter.with(filters);
}
if (javaType != null && javaType.isContainerType()) {
objectWriter = objectWriter.forType(javaType);
Expand All @@ -291,7 +288,6 @@ else if (filters != null) {

writeSuffix(generator, object);
generator.flush();

}
catch (InvalidDefinitionException ex) {
throw new HttpMessageConversionException("Type definition error: " + ex.getType(), ex);
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -27,6 +27,7 @@
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.ser.FilterProvider;

Expand Down Expand Up @@ -205,27 +206,26 @@ protected Object filterAndWrapModel(Map<String, Object> model, HttpServletReques
*/
protected void writeContent(OutputStream stream, Object object) throws IOException {
JsonGenerator generator = this.objectMapper.getFactory().createGenerator(stream, this.encoding);

writePrefix(generator, object);

Object value = object;
Class<?> serializationView = null;
FilterProvider filters = null;
Object value = object;

if (value instanceof MappingJacksonValue) {
MappingJacksonValue container = (MappingJacksonValue) value;
value = container.getValue();
serializationView = container.getSerializationView();
filters = container.getFilters();
}
if (serializationView != null) {
this.objectMapper.writerWithView(serializationView).writeValue(generator, value);
}
else if (filters != null) {
this.objectMapper.writer(filters).writeValue(generator, value);
}
else {
this.objectMapper.writeValue(generator, value);

ObjectWriter objectWriter = (serializationView != null ?
this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
if (filters != null) {
objectWriter = objectWriter.with(filters);
}
objectWriter.writeValue(generator, value);

writeSuffix(generator, object);
generator.flush();
}
Expand Down

0 comments on commit 03f1920

Please sign in to comment.