Skip to content

Commit a44fe4c

Browse files
committed
Support Jackson filters in combination with serialization view
Issue: SPR-17209 (cherry picked from commit 03f1920)
1 parent abb92b6 commit a44fe4c

File tree

2 files changed

+18
-22
lines changed

2 files changed

+18
-22
lines changed

spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,11 @@ protected void writeInternal(Object object, @Nullable Type type, HttpOutputMessa
254254
try {
255255
writePrefix(generator, object);
256256

257+
Object value = object;
257258
Class<?> serializationView = null;
258259
FilterProvider filters = null;
259-
Object value = object;
260260
JavaType javaType = null;
261+
261262
if (object instanceof MappingJacksonValue) {
262263
MappingJacksonValue container = (MappingJacksonValue) object;
263264
value = container.getValue();
@@ -267,15 +268,11 @@ protected void writeInternal(Object object, @Nullable Type type, HttpOutputMessa
267268
if (type != null && TypeUtils.isAssignable(type, value.getClass())) {
268269
javaType = getJavaType(type, null);
269270
}
270-
ObjectWriter objectWriter;
271-
if (serializationView != null) {
272-
objectWriter = this.objectMapper.writerWithView(serializationView);
273-
}
274-
else if (filters != null) {
275-
objectWriter = this.objectMapper.writer(filters);
276-
}
277-
else {
278-
objectWriter = this.objectMapper.writer();
271+
272+
ObjectWriter objectWriter = (serializationView != null ?
273+
this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
274+
if (filters != null) {
275+
objectWriter = objectWriter.with(filters);
279276
}
280277
if (javaType != null && javaType.isContainerType()) {
281278
objectWriter = objectWriter.forType(javaType);
@@ -289,7 +286,6 @@ else if (filters != null) {
289286

290287
writeSuffix(generator, object);
291288
generator.flush();
292-
293289
}
294290
catch (InvalidDefinitionException ex) {
295291
throw new HttpMessageConversionException("Type definition error: " + ex.getType(), ex);

spring-webmvc/src/main/java/org/springframework/web/servlet/view/json/AbstractJackson2View.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2017 the original author or authors.
2+
* Copyright 2002-2018 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -27,6 +27,7 @@
2727
import com.fasterxml.jackson.core.JsonEncoding;
2828
import com.fasterxml.jackson.core.JsonGenerator;
2929
import com.fasterxml.jackson.databind.ObjectMapper;
30+
import com.fasterxml.jackson.databind.ObjectWriter;
3031
import com.fasterxml.jackson.databind.SerializationFeature;
3132
import com.fasterxml.jackson.databind.ser.FilterProvider;
3233

@@ -205,27 +206,26 @@ protected Object filterAndWrapModel(Map<String, Object> model, HttpServletReques
205206
*/
206207
protected void writeContent(OutputStream stream, Object object) throws IOException {
207208
JsonGenerator generator = this.objectMapper.getFactory().createGenerator(stream, this.encoding);
208-
209209
writePrefix(generator, object);
210+
211+
Object value = object;
210212
Class<?> serializationView = null;
211213
FilterProvider filters = null;
212-
Object value = object;
213214

214215
if (value instanceof MappingJacksonValue) {
215216
MappingJacksonValue container = (MappingJacksonValue) value;
216217
value = container.getValue();
217218
serializationView = container.getSerializationView();
218219
filters = container.getFilters();
219220
}
220-
if (serializationView != null) {
221-
this.objectMapper.writerWithView(serializationView).writeValue(generator, value);
222-
}
223-
else if (filters != null) {
224-
this.objectMapper.writer(filters).writeValue(generator, value);
225-
}
226-
else {
227-
this.objectMapper.writeValue(generator, value);
221+
222+
ObjectWriter objectWriter = (serializationView != null ?
223+
this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
224+
if (filters != null) {
225+
objectWriter = objectWriter.with(filters);
228226
}
227+
objectWriter.writeValue(generator, value);
228+
229229
writeSuffix(generator, object);
230230
generator.flush();
231231
}

0 commit comments

Comments
 (0)