Skip to content

Commit 069704f

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

File tree

2 files changed

+18
-22
lines changed

2 files changed

+18
-22
lines changed

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

+7-11
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,11 @@ protected void writeInternal(Object object, Type type, HttpOutputMessage outputM
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, Type type, HttpOutputMessage outputM
267268
if (type != null && value != 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 (JsonProcessingException ex) {
295291
throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getOriginalMessage(), ex);

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

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2015 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

@@ -189,27 +190,26 @@ protected Object filterAndWrapModel(Map<String, Object> model, HttpServletReques
189190
*/
190191
protected void writeContent(OutputStream stream, Object object) throws IOException {
191192
JsonGenerator generator = this.objectMapper.getFactory().createGenerator(stream, this.encoding);
192-
193193
writePrefix(generator, object);
194+
195+
Object value = object;
194196
Class<?> serializationView = null;
195197
FilterProvider filters = null;
196-
Object value = object;
197198

198199
if (value instanceof MappingJacksonValue) {
199200
MappingJacksonValue container = (MappingJacksonValue) value;
200201
value = container.getValue();
201202
serializationView = container.getSerializationView();
202203
filters = container.getFilters();
203204
}
204-
if (serializationView != null) {
205-
this.objectMapper.writerWithView(serializationView).writeValue(generator, value);
206-
}
207-
else if (filters != null) {
208-
this.objectMapper.writer(filters).writeValue(generator, value);
209-
}
210-
else {
211-
this.objectMapper.writeValue(generator, value);
205+
206+
ObjectWriter objectWriter = (serializationView != null ?
207+
this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
208+
if (filters != null) {
209+
objectWriter = objectWriter.with(filters);
212210
}
211+
objectWriter.writeValue(generator, value);
212+
213213
writeSuffix(generator, object);
214214
generator.flush();
215215
}

0 commit comments

Comments
 (0)