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:
Stephane Nicoll
2014-01-18 11:23:32 +01:00
committed by Rossen Stoyanchev
parent b92e4299b8
commit 7df25764af
3 changed files with 101 additions and 0 deletions

View File

@@ -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: