Skip to content

Commit 03f1920

Browse files
committed
Support Jackson filters in combination with serialization view
Issue: SPR-17209
1 parent 7056808 commit 03f1920

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
@@ -256,10 +256,11 @@ protected void writeInternal(Object object, @Nullable Type type, HttpOutputMessa
256256
try {
257257
writePrefix(generator, object);
258258

259+
Object value = object;
259260
Class<?> serializationView = null;
260261
FilterProvider filters = null;
261-
Object value = object;
262262
JavaType javaType = null;
263+
263264
if (object instanceof MappingJacksonValue) {
264265
MappingJacksonValue container = (MappingJacksonValue) object;
265266
value = container.getValue();
@@ -269,15 +270,11 @@ protected void writeInternal(Object object, @Nullable Type type, HttpOutputMessa
269270
if (type != null && TypeUtils.isAssignable(type, value.getClass())) {
270271
javaType = getJavaType(type, null);
271272
}
272-
ObjectWriter objectWriter;
273-
if (serializationView != null) {
274-
objectWriter = this.objectMapper.writerWithView(serializationView);
275-
}
276-
else if (filters != null) {
277-
objectWriter = this.objectMapper.writer(filters);
278-
}
279-
else {
280-
objectWriter = this.objectMapper.writer();
273+
274+
ObjectWriter objectWriter = (serializationView != null ?
275+
this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
276+
if (filters != null) {
277+
objectWriter = objectWriter.with(filters);
281278
}
282279
if (javaType != null && javaType.isContainerType()) {
283280
objectWriter = objectWriter.forType(javaType);
@@ -291,7 +288,6 @@ else if (filters != null) {
291288

292289
writeSuffix(generator, object);
293290
generator.flush();
294-
295291
}
296292
catch (InvalidDefinitionException ex) {
297293
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)