Skip to content

Commit d54a975

Browse files
committed
SPR-6248 - Accept header should not be mandatory for properly handling response body.
1 parent a86baca commit d54a975

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@
5656
import org.springframework.core.annotation.AnnotationUtils;
5757
import org.springframework.http.HttpInputMessage;
5858
import org.springframework.http.HttpOutputMessage;
59-
import org.springframework.http.MediaType;
6059
import org.springframework.http.HttpStatus;
60+
import org.springframework.http.MediaType;
6161
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
6262
import org.springframework.http.converter.FormHttpMessageConverter;
6363
import org.springframework.http.converter.HttpMessageConverter;
@@ -779,6 +779,9 @@ else if (!BeanUtils.isSimpleProperty(returnValue.getClass())) {
779779
private void handleResponseBody(Object returnValue, ServletWebRequest webRequest) throws ServletException, IOException {
780780
HttpInputMessage inputMessage = new ServletServerHttpRequest(webRequest.getRequest());
781781
List<MediaType> acceptedMediaTypes = inputMessage.getHeaders().getAccept();
782+
if (acceptedMediaTypes.isEmpty()) {
783+
acceptedMediaTypes = Collections.singletonList(MediaType.ALL);
784+
}
782785
HttpOutputMessage outputMessage = new ServletServerHttpResponse(webRequest.getResponse());
783786
Class<?> returnValueType = returnValue.getClass();
784787
List<MediaType> allSupportedMediaTypes = new ArrayList<MediaType>();

org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationControllerTests.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* you may not use this file except in compliance with the License.
66
* You may obtain a copy of the License at
77
*
8-
* http://www.apache.org/licensesch/LICENSE-2.0
8+
* http://www.apache.org/licenses/LICENSE-2.0
99
*
1010
* Unless required by applicable law or agreed to in writing, software
1111
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -970,6 +970,7 @@ public void requestBodyResponseBody() throws ServletException, IOException {
970970
request.addHeader("Accept", "text/*");
971971
MockHttpServletResponse response = new MockHttpServletResponse();
972972
servlet.service(request, response);
973+
assertEquals(200, response.getStatus());
973974
assertEquals(requestBody, response.getContentAsString());
974975
}
975976

@@ -1016,6 +1017,20 @@ public void unsupportedRequestBody() throws ServletException, IOException {
10161017
assertNotNull("No Accept response header set", response.getHeader("Accept"));
10171018
}
10181019

1020+
@Test
1021+
public void responseBodyNoAcceptHeader() throws ServletException, IOException {
1022+
initServlet(RequestBodyController.class);
1023+
1024+
MockHttpServletRequest request = new MockHttpServletRequest("PUT", "/something");
1025+
String requestBody = "Hello World";
1026+
request.setContent(requestBody.getBytes("UTF-8"));
1027+
request.addHeader("Content-Type", "text/plain; charset=utf-8");
1028+
MockHttpServletResponse response = new MockHttpServletResponse();
1029+
servlet.service(request, response);
1030+
assertEquals(200, response.getStatus());
1031+
assertEquals(requestBody, response.getContentAsString());
1032+
}
1033+
10191034
@Test
10201035
public void badRequestRequestBody() throws ServletException, IOException {
10211036
@SuppressWarnings("serial") DispatcherServlet servlet = new DispatcherServlet() {

0 commit comments

Comments
 (0)