Allow HttpHeaders return values for @MVC methods
Allow HttpHeader instances to be returned directly from MVC controller methods managed by HandlerMethodReturnValueHandler rather than needing to be wrapped in a ResponseEntity. Issue: SPR-11129
This commit is contained in:
committed by
Rossen Stoyanchev
parent
b92e4299b8
commit
7df25764af
@@ -26,6 +26,8 @@ import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.security.Principal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
@@ -1575,6 +1577,28 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl
|
||||
assertEquals("Hello World!", response.getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void responseAsHttpHeaders() throws Exception {
|
||||
initServletWithControllers(HttpHeadersResponseController.class);
|
||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||
getServlet().service(new MockHttpServletRequest("POST", "/"), response);
|
||||
|
||||
assertEquals("Wrong status code", MockHttpServletResponse.SC_CREATED, response.getStatus());
|
||||
assertEquals("Wrong number of headers", 1, response.getHeaderNames().size());
|
||||
assertEquals("Wrong value for 'location' header", "/test/items/123", response.getHeader("location"));
|
||||
assertEquals("Expected an empty content", 0, response.getContentLength());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void responseAsHttpHeadersNoHeader() throws Exception {
|
||||
initServletWithControllers(HttpHeadersResponseController.class);
|
||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||
getServlet().service(new MockHttpServletRequest("POST", "/empty"), response);
|
||||
|
||||
assertEquals("Wrong status code", MockHttpServletResponse.SC_CREATED, response.getStatus());
|
||||
assertEquals("Wrong number of headers", 0, response.getHeaderNames().size());
|
||||
assertEquals("Expected an empty content", 0, response.getContentLength());
|
||||
}
|
||||
|
||||
/*
|
||||
* Controllers
|
||||
@@ -2995,6 +3019,25 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl
|
||||
}
|
||||
}
|
||||
|
||||
@Controller
|
||||
static class HttpHeadersResponseController {
|
||||
|
||||
@RequestMapping(value = "", method = RequestMethod.POST)
|
||||
@ResponseStatus(HttpStatus.CREATED)
|
||||
public HttpHeaders create() throws URISyntaxException {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setLocation(new URI("/test/items/123"));
|
||||
return headers;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "empty", method = RequestMethod.POST)
|
||||
@ResponseStatus(HttpStatus.CREATED)
|
||||
public HttpHeaders createNoHeader() throws URISyntaxException {
|
||||
return new HttpHeaders();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Test cases deleted from the original SevletAnnotationControllerTests:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user