Skip to content

Commit 44cf002

Browse files
committed
Null-safe handling of response type in AcceptHeaderRequestCallback
Issue: SPR-16690
1 parent d5aedac commit 44cf002

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

spring-web/src/main/java/org/springframework/web/client/RestTemplate.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -831,17 +831,15 @@ private class AcceptHeaderRequestCallback implements RequestCallback {
831831
@Nullable
832832
private final Type responseType;
833833

834-
private AcceptHeaderRequestCallback(@Nullable Type responseType) {
834+
public AcceptHeaderRequestCallback(@Nullable Type responseType) {
835835
this.responseType = responseType;
836836
}
837837

838838
@Override
839839
public void doWithRequest(ClientHttpRequest request) throws IOException {
840840
if (this.responseType != null) {
841-
final Class<?> responseClass = (this.responseType instanceof Class) ?
842-
(Class<?>) this.responseType : null;
843-
final List<MediaType> allSupportedMediaTypes = getMessageConverters().stream()
844-
.filter(converter -> canReadResponse(responseClass, converter))
841+
List<MediaType> allSupportedMediaTypes = getMessageConverters().stream()
842+
.filter(converter -> canReadResponse(this.responseType, converter))
845843
.flatMap(this::getSupportedMediaTypes)
846844
.distinct()
847845
.sorted(MediaType.SPECIFICITY_COMPARATOR)
@@ -853,15 +851,14 @@ public void doWithRequest(ClientHttpRequest request) throws IOException {
853851
}
854852
}
855853

856-
private boolean canReadResponse(@Nullable Class<?> responseClass, HttpMessageConverter<?> converter) {
854+
private boolean canReadResponse(Type responseType, HttpMessageConverter<?> converter) {
855+
Class<?> responseClass = (responseType instanceof Class ? (Class<?>) responseType : null);
857856
if (responseClass != null) {
858857
return converter.canRead(responseClass, null);
859858
}
860859
else if (converter instanceof GenericHttpMessageConverter) {
861-
GenericHttpMessageConverter<?> genericConverter =
862-
(GenericHttpMessageConverter<?>) converter;
863-
return genericConverter
864-
.canRead(this.responseType, null, null);
860+
GenericHttpMessageConverter<?> genericConverter = (GenericHttpMessageConverter<?>) converter;
861+
return genericConverter.canRead(responseType, null, null);
865862
}
866863
return false;
867864
}
@@ -886,11 +883,11 @@ private class HttpEntityRequestCallback extends AcceptHeaderRequestCallback {
886883

887884
private final HttpEntity<?> requestEntity;
888885

889-
private HttpEntityRequestCallback(@Nullable Object requestBody) {
886+
public HttpEntityRequestCallback(@Nullable Object requestBody) {
890887
this(requestBody, null);
891888
}
892889

893-
private HttpEntityRequestCallback(@Nullable Object requestBody, @Nullable Type responseType) {
890+
public HttpEntityRequestCallback(@Nullable Object requestBody, @Nullable Type responseType) {
894891
super(responseType);
895892
if (requestBody instanceof HttpEntity) {
896893
this.requestEntity = (HttpEntity<?>) requestBody;
@@ -1013,7 +1010,7 @@ public ResponseEntity<T> extractData(ClientHttpResponse response) throws IOExcep
10131010
private static class HeadersExtractor implements ResponseExtractor<HttpHeaders> {
10141011

10151012
@Override
1016-
public HttpHeaders extractData(ClientHttpResponse response) throws IOException {
1013+
public HttpHeaders extractData(ClientHttpResponse response) {
10171014
return response.getHeaders();
10181015
}
10191016
}

0 commit comments

Comments
 (0)