Support Jackson filters in combination with serialization view
Issue: SPR-17209
This commit is contained in:
parent
7056808716
commit
03f1920106
|
|
@ -256,10 +256,11 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
|
||||||
try {
|
try {
|
||||||
writePrefix(generator, object);
|
writePrefix(generator, object);
|
||||||
|
|
||||||
|
Object value = object;
|
||||||
Class<?> serializationView = null;
|
Class<?> serializationView = null;
|
||||||
FilterProvider filters = null;
|
FilterProvider filters = null;
|
||||||
Object value = object;
|
|
||||||
JavaType javaType = null;
|
JavaType javaType = null;
|
||||||
|
|
||||||
if (object instanceof MappingJacksonValue) {
|
if (object instanceof MappingJacksonValue) {
|
||||||
MappingJacksonValue container = (MappingJacksonValue) object;
|
MappingJacksonValue container = (MappingJacksonValue) object;
|
||||||
value = container.getValue();
|
value = container.getValue();
|
||||||
|
|
@ -269,15 +270,11 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
|
||||||
if (type != null && TypeUtils.isAssignable(type, value.getClass())) {
|
if (type != null && TypeUtils.isAssignable(type, value.getClass())) {
|
||||||
javaType = getJavaType(type, null);
|
javaType = getJavaType(type, null);
|
||||||
}
|
}
|
||||||
ObjectWriter objectWriter;
|
|
||||||
if (serializationView != null) {
|
ObjectWriter objectWriter = (serializationView != null ?
|
||||||
objectWriter = this.objectMapper.writerWithView(serializationView);
|
this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
|
||||||
}
|
if (filters != null) {
|
||||||
else if (filters != null) {
|
objectWriter = objectWriter.with(filters);
|
||||||
objectWriter = this.objectMapper.writer(filters);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
objectWriter = this.objectMapper.writer();
|
|
||||||
}
|
}
|
||||||
if (javaType != null && javaType.isContainerType()) {
|
if (javaType != null && javaType.isContainerType()) {
|
||||||
objectWriter = objectWriter.forType(javaType);
|
objectWriter = objectWriter.forType(javaType);
|
||||||
|
|
@ -291,7 +288,6 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
|
||||||
|
|
||||||
writeSuffix(generator, object);
|
writeSuffix(generator, object);
|
||||||
generator.flush();
|
generator.flush();
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (InvalidDefinitionException ex) {
|
catch (InvalidDefinitionException ex) {
|
||||||
throw new HttpMessageConversionException("Type definition error: " + ex.getType(), ex);
|
throw new HttpMessageConversionException("Type definition error: " + ex.getType(), ex);
|
||||||
|
|
|
||||||
|
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -27,6 +27,7 @@ import com.fasterxml.jackson.annotation.JsonView;
|
||||||
import com.fasterxml.jackson.core.JsonEncoding;
|
import com.fasterxml.jackson.core.JsonEncoding;
|
||||||
import com.fasterxml.jackson.core.JsonGenerator;
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectWriter;
|
||||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||||
import com.fasterxml.jackson.databind.ser.FilterProvider;
|
import com.fasterxml.jackson.databind.ser.FilterProvider;
|
||||||
|
|
||||||
|
|
@ -205,11 +206,11 @@ public abstract class AbstractJackson2View extends AbstractView {
|
||||||
*/
|
*/
|
||||||
protected void writeContent(OutputStream stream, Object object) throws IOException {
|
protected void writeContent(OutputStream stream, Object object) throws IOException {
|
||||||
JsonGenerator generator = this.objectMapper.getFactory().createGenerator(stream, this.encoding);
|
JsonGenerator generator = this.objectMapper.getFactory().createGenerator(stream, this.encoding);
|
||||||
|
|
||||||
writePrefix(generator, object);
|
writePrefix(generator, object);
|
||||||
|
|
||||||
|
Object value = object;
|
||||||
Class<?> serializationView = null;
|
Class<?> serializationView = null;
|
||||||
FilterProvider filters = null;
|
FilterProvider filters = null;
|
||||||
Object value = object;
|
|
||||||
|
|
||||||
if (value instanceof MappingJacksonValue) {
|
if (value instanceof MappingJacksonValue) {
|
||||||
MappingJacksonValue container = (MappingJacksonValue) value;
|
MappingJacksonValue container = (MappingJacksonValue) value;
|
||||||
|
|
@ -217,15 +218,14 @@ public abstract class AbstractJackson2View extends AbstractView {
|
||||||
serializationView = container.getSerializationView();
|
serializationView = container.getSerializationView();
|
||||||
filters = container.getFilters();
|
filters = container.getFilters();
|
||||||
}
|
}
|
||||||
if (serializationView != null) {
|
|
||||||
this.objectMapper.writerWithView(serializationView).writeValue(generator, value);
|
ObjectWriter objectWriter = (serializationView != null ?
|
||||||
}
|
this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
|
||||||
else if (filters != null) {
|
if (filters != null) {
|
||||||
this.objectMapper.writer(filters).writeValue(generator, value);
|
objectWriter = objectWriter.with(filters);
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.objectMapper.writeValue(generator, value);
|
|
||||||
}
|
}
|
||||||
|
objectWriter.writeValue(generator, value);
|
||||||
|
|
||||||
writeSuffix(generator, object);
|
writeSuffix(generator, object);
|
||||||
generator.flush();
|
generator.flush();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue