SPR-4518 - @RequestMapping methods returning null have an implicit ModelAndView created

This commit is contained in:
Arjen Poutsma
2009-04-22 12:57:30 +00:00
parent c1667687d5
commit 6fbd198420
3 changed files with 34 additions and 2 deletions

View File

@@ -25,12 +25,14 @@ import java.lang.annotation.Target;
import org.springframework.http.HttpStatus;
/**
* Marks an exception class with the status code and reason that should be returned whenever said exception is thrown.
* Marks a method or exception class with the status code and reason that should be returned. The status code is applied
* to the HTTP response when the handler method is invoked, or whenever said exception is thrown.
*
* @author Arjen Poutsma
* @see org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver
* @since 3.0
*/
@Target(ElementType.TYPE)
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseStatus {

View File

@@ -75,6 +75,7 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.annotation.support.HandlerMethodInvoker;
import org.springframework.web.bind.annotation.support.HandlerMethodResolver;
@@ -672,6 +673,13 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator implemen
ExtendedModelMap implicitModel,
ServletWebRequest webRequest) {
if (handlerMethod.isAnnotationPresent(ResponseStatus.class)) {
ResponseStatus responseStatus = handlerMethod.getAnnotation(ResponseStatus.class);
HttpServletResponse response = webRequest.getResponse();
response.setStatus(responseStatus.value().value());
responseArgumentUsed = true;
}
if (returnValue instanceof ModelAndView) {
ModelAndView mav = (ModelAndView) returnValue;
mav.getModelMap().mergeAttributes(implicitModel);