Fix potential NullPointerException in HalFormsAdaptingResponseBodyAdvice.
Fixes #2123.
This commit is contained in:
@@ -30,6 +30,7 @@ import org.springframework.http.MediaType;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.http.server.ServerHttpRequest;
|
||||
import org.springframework.http.server.ServerHttpResponse;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.web.HttpMediaTypeNotAcceptableException;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
|
||||
@@ -55,7 +56,7 @@ class HalFormsAdaptingResponseBodyAdvice<T extends RepresentationModel<T>>
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public RepresentationModel<T> beforeBodyWrite(RepresentationModel<T> body, MethodParameter returnType,
|
||||
public RepresentationModel<T> beforeBodyWrite(@Nullable RepresentationModel<T> body, MethodParameter returnType,
|
||||
MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType,
|
||||
ServerHttpRequest request, ServerHttpResponse response) {
|
||||
|
||||
@@ -66,7 +67,7 @@ class HalFormsAdaptingResponseBodyAdvice<T extends RepresentationModel<T>>
|
||||
|
||||
List<MediaType> accept = request.getHeaders().getAccept();
|
||||
|
||||
boolean hasAffordances = body.getLinks().stream()
|
||||
boolean hasAffordances = body != null && body.getLinks().stream()
|
||||
.anyMatch(it -> !it.getAffordances().isEmpty());
|
||||
|
||||
// Affordances registered -> we're fine as we will render templates
|
||||
|
||||
@@ -35,6 +35,7 @@ import org.springframework.http.MediaType;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
import org.springframework.http.server.ServletServerHttpRequest;
|
||||
import org.springframework.http.server.ServletServerHttpResponse;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.MockHttpServletResponse;
|
||||
import org.springframework.web.HttpMediaTypeNotAcceptableException;
|
||||
@@ -95,7 +96,16 @@ class HalFormsAdaptingResponseBodyAdviceTests<T extends RepresentationModel<T>>
|
||||
.isThrownBy(() -> assertResponseContentType(model, MediaTypes.HAL_JSON));
|
||||
}
|
||||
|
||||
private void assertResponseContentType(RepresentationModel<T> model, MediaType mediaType) {
|
||||
@Test // #2123
|
||||
void handlesNullBodyCorrectly() {
|
||||
|
||||
request.addHeader(HttpHeaders.ACCEPT,
|
||||
MediaType.toString(Arrays.asList(MediaTypes.HAL_JSON)));
|
||||
|
||||
assertThatNoException().isThrownBy(() -> assertResponseContentType(null, MediaTypes.HAL_JSON));
|
||||
}
|
||||
|
||||
private void assertResponseContentType(@Nullable RepresentationModel<T> model, MediaType mediaType) {
|
||||
|
||||
this.response.addHeader(HttpHeaders.CONTENT_TYPE, MediaTypes.HAL_FORMS_JSON_VALUE);
|
||||
ServletServerHttpResponse response = new ServletServerHttpResponse(this.response);
|
||||
|
||||
Reference in New Issue
Block a user