Fix type check for ResponseEntity<ResponseBodyEmitter>
Issue: SPR-12693
This commit is contained in:
parent
13cdd22f5e
commit
8f0ddf1b1d
|
|
@ -26,6 +26,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.springframework.core.MethodParameter;
|
import org.springframework.core.MethodParameter;
|
||||||
|
import org.springframework.core.ResolvableType;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
|
|
@ -66,14 +67,8 @@ public class ResponseBodyEmitterReturnValueHandler implements HandlerMethodRetur
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (ResponseEntity.class.isAssignableFrom(returnType.getParameterType())) {
|
else if (ResponseEntity.class.isAssignableFrom(returnType.getParameterType())) {
|
||||||
Type paramType = returnType.getGenericParameterType();
|
Class<?> bodyType = ResolvableType.forMethodParameter(returnType).getGeneric(0).resolve();
|
||||||
if (paramType instanceof ParameterizedType) {
|
return (bodyType != null && ResponseBodyEmitter.class.isAssignableFrom(bodyType));
|
||||||
ParameterizedType type = (ParameterizedType) paramType;
|
|
||||||
Type[] typeArguments = type.getActualTypeArguments();
|
|
||||||
if (typeArguments.length == 1) {
|
|
||||||
return ResponseBodyEmitter.class.isAssignableFrom((Class<?>) typeArguments[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ package org.springframework.web.servlet.mvc.method.annotation;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
@ -86,6 +87,7 @@ public class ResponseBodyEmitterReturnValueHandlerTests {
|
||||||
assertTrue(this.handler.supportsReturnType(returnType(TestController.class, "handleSse")));
|
assertTrue(this.handler.supportsReturnType(returnType(TestController.class, "handleSse")));
|
||||||
assertTrue(this.handler.supportsReturnType(returnType(TestController.class, "handleResponseEntity")));
|
assertTrue(this.handler.supportsReturnType(returnType(TestController.class, "handleResponseEntity")));
|
||||||
assertFalse(this.handler.supportsReturnType(returnType(TestController.class, "handleResponseEntityString")));
|
assertFalse(this.handler.supportsReturnType(returnType(TestController.class, "handleResponseEntityString")));
|
||||||
|
assertFalse(this.handler.supportsReturnType(returnType(TestController.class, "handleResponseEntityParameterized")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -207,6 +209,10 @@ public class ResponseBodyEmitterReturnValueHandlerTests {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ResponseEntity<AtomicReference<String>> handleResponseEntityParameterized() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class SimpleBean {
|
private static class SimpleBean {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue