|
27 | 27 | import com.fasterxml.jackson.core.JsonEncoding;
|
28 | 28 | import com.fasterxml.jackson.core.JsonGenerator;
|
29 | 29 | import com.fasterxml.jackson.core.JsonProcessingException;
|
| 30 | +import com.fasterxml.jackson.core.PrettyPrinter; |
| 31 | +import com.fasterxml.jackson.core.util.DefaultIndenter; |
30 | 32 | import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
|
31 | 33 | import com.fasterxml.jackson.databind.JavaType;
|
32 | 34 | import com.fasterxml.jackson.databind.JsonMappingException;
|
33 | 35 | import com.fasterxml.jackson.databind.ObjectMapper;
|
34 | 36 | import com.fasterxml.jackson.databind.ObjectWriter;
|
| 37 | +import com.fasterxml.jackson.databind.SerializationConfig; |
35 | 38 | import com.fasterxml.jackson.databind.SerializationFeature;
|
36 | 39 | import com.fasterxml.jackson.databind.ser.FilterProvider;
|
37 | 40 | import com.fasterxml.jackson.databind.type.TypeFactory;
|
@@ -69,22 +72,29 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
|
69 | 72 |
|
70 | 73 | private Boolean prettyPrint;
|
71 | 74 |
|
| 75 | + private PrettyPrinter ssePrettyPrinter; |
| 76 | + |
72 | 77 |
|
73 | 78 | protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper) {
|
74 |
| - this.objectMapper = objectMapper; |
75 |
| - setDefaultCharset(DEFAULT_CHARSET); |
| 79 | + init(objectMapper); |
76 | 80 | }
|
77 | 81 |
|
78 | 82 | protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType supportedMediaType) {
|
79 | 83 | super(supportedMediaType);
|
80 |
| - this.objectMapper = objectMapper; |
81 |
| - setDefaultCharset(DEFAULT_CHARSET); |
| 84 | + init(objectMapper); |
82 | 85 | }
|
83 | 86 |
|
84 | 87 | protected AbstractJackson2HttpMessageConverter(ObjectMapper objectMapper, MediaType... supportedMediaTypes) {
|
85 | 88 | super(supportedMediaTypes);
|
| 89 | + init(objectMapper); |
| 90 | + } |
| 91 | + |
| 92 | + protected void init(ObjectMapper objectMapper) { |
86 | 93 | this.objectMapper = objectMapper;
|
87 | 94 | setDefaultCharset(DEFAULT_CHARSET);
|
| 95 | + DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter(); |
| 96 | + prettyPrinter.indentObjectsWith(new DefaultIndenter(" ", "\ndata:")); |
| 97 | + this.ssePrettyPrinter = prettyPrinter; |
88 | 98 | }
|
89 | 99 |
|
90 | 100 |
|
@@ -234,7 +244,8 @@ private Object readJavaType(JavaType javaType, HttpInputMessage inputMessage) {
|
234 | 244 | protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage)
|
235 | 245 | throws IOException, HttpMessageNotWritableException {
|
236 | 246 |
|
237 |
| - JsonEncoding encoding = getJsonEncoding(outputMessage.getHeaders().getContentType()); |
| 247 | + MediaType contentType = outputMessage.getHeaders().getContentType(); |
| 248 | + JsonEncoding encoding = getJsonEncoding(contentType); |
238 | 249 | JsonGenerator generator = this.objectMapper.getFactory().createGenerator(outputMessage.getBody(), encoding);
|
239 | 250 | try {
|
240 | 251 | writePrefix(generator, object);
|
@@ -265,6 +276,11 @@ else if (filters != null) {
|
265 | 276 | if (javaType != null && javaType.isContainerType()) {
|
266 | 277 | objectWriter = objectWriter.forType(javaType);
|
267 | 278 | }
|
| 279 | + SerializationConfig config = objectWriter.getConfig(); |
| 280 | + if (contentType != null && contentType.isCompatibleWith(MediaType.TEXT_EVENT_STREAM) && |
| 281 | + config.isEnabled(SerializationFeature.INDENT_OUTPUT)) { |
| 282 | + objectWriter = objectWriter.with(this.ssePrettyPrinter); |
| 283 | + } |
268 | 284 | objectWriter.writeValue(generator, value);
|
269 | 285 |
|
270 | 286 | writeSuffix(generator, object);
|
|
0 commit comments