Have ReactiveTypeHandler consider +x-ndjson suffix as streaming
This commit adds `application/*+x-ndjson`, a wildcard media type which covers all types that can be parsed as nd-json, to the list of media types the ReactiveTypeHandler considers for a streaming response in WebMVC. As a result, a request which for example `Accept` the `application/vnd.myapp.v1+x-ndjson` media type will generate a response with the same `Content-Type`, with newline-delimited json objects being streamed in the response body. Closes gh-26817
This commit is contained in:
@@ -80,7 +80,8 @@ class ReactiveTypeHandler {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private static final List<MediaType> JSON_STREAMING_MEDIA_TYPES =
|
||||
Arrays.asList(MediaType.APPLICATION_NDJSON, MediaType.APPLICATION_STREAM_JSON);
|
||||
Arrays.asList(MediaType.APPLICATION_NDJSON, MediaType.APPLICATION_STREAM_JSON,
|
||||
MediaType.valueOf("application/*+x-ndjson"));
|
||||
|
||||
private static final boolean isContextPropagationPresent = ClassUtils.isPresent(
|
||||
"io.micrometer.context.ContextSnapshot", ReactiveTypeHandler.class.getClassLoader());
|
||||
@@ -165,7 +166,7 @@ class ReactiveTypeHandler {
|
||||
for (MediaType streamingType : JSON_STREAMING_MEDIA_TYPES) {
|
||||
if (streamingType.includes(type)) {
|
||||
logExecutorWarning(returnType);
|
||||
ResponseBodyEmitter emitter = getEmitter(streamingType);
|
||||
ResponseBodyEmitter emitter = getEmitter(type);
|
||||
new JsonEmitterSubscriber(emitter, this.taskExecutor).connect(adapter, returnValue);
|
||||
return emitter;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user