Fix some logic with media types

If user sends "Accept: */*" we don't want to default to sending
an SSE (for instance). So the logic for detecting those preferences
has to take MediaType.ALL into account as a special case.
This commit is contained in:
Dave Syer
2017-01-20 13:10:54 +00:00
parent f709a4e08a
commit 452106f287
3 changed files with 40 additions and 5 deletions

View File

@@ -84,7 +84,7 @@ public class FluxReturnValueHandler implements AsyncHandlerMethodReturnValueHand
}
private ResponseBodyEmitter getEmitter(Long timeout, Flux<?> flux, MediaType mediaType) {
if (EVENT_STREAM.isCompatibleWith(mediaType)) {
if (!MediaType.ALL.equals(mediaType) && EVENT_STREAM.isCompatibleWith(mediaType)) {
return new FluxResponseSseEmitter<>(timeout, mediaType, flux);
}
return new FluxResponseBodyEmitter<>(timeout, mediaType, flux);

View File

@@ -56,7 +56,7 @@ class ResponseBodyEmitterSubscriber<T> implements Subscriber<T>, Runnable {
@Override
public void onSubscribe(Subscription subscription) {
if (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)) {
if (!MediaType.ALL.equals(mediaType) && MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)) {
try {
this.responseBodyEmitter.send("[");
}
@@ -74,7 +74,7 @@ class ResponseBodyEmitterSubscriber<T> implements Subscriber<T>, Runnable {
Object object = value;
try {
if (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)) {
if (!MediaType.ALL.equals(mediaType) && MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)) {
if (!this.firstElementWritten) {
this.firstElementWritten = true;
}
@@ -106,7 +106,7 @@ class ResponseBodyEmitterSubscriber<T> implements Subscriber<T>, Runnable {
if (!completed) {
completed = true;
try {
if (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)) {
if (!MediaType.ALL.equals(mediaType) && MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)) {
if (!this.firstElementWritten) {
this.firstElementWritten = true;