diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java index a1156798b08..30d29e1414b 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java @@ -103,11 +103,14 @@ import org.springframework.web.bind.support.WebBindingInitializer; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.RequestScope; import org.springframework.web.context.request.ServletWebRequest; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.method.HandlerMethod; import org.springframework.web.multipart.MultipartRequest; import org.springframework.web.servlet.HandlerAdapter; import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.View; +import org.springframework.web.servlet.mvc.LastModified; import org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver; import org.springframework.web.servlet.mvc.multiaction.MethodNameResolver; import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException; @@ -440,6 +443,13 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator return mav; } + /** + * This method always returns -1 since an annotated controller can have many methods, each + * requiring separate lastModified calculations. Instead an @{@link RequestMapping} method + * can calculate the lastModified value, call {@link WebRequest#checkNotModified(long)} to + * check it, and return {@code null} if that returns {@code true}. + * @see WebRequest#checkNotModified(long) + */ public long getLastModified(HttpServletRequest request, Object handler) { return -1; } diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java index b5dc22e5f42..72b100d8614 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java @@ -56,6 +56,7 @@ import org.springframework.web.bind.support.WebArgumentResolver; import org.springframework.web.bind.support.WebBindingInitializer; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.ServletWebRequest; +import org.springframework.web.context.request.WebRequest; import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethodSelector; import org.springframework.web.method.annotation.ModelFactory; @@ -76,6 +77,7 @@ import org.springframework.web.method.support.InvocableHandlerMethod; import org.springframework.web.method.support.ModelAndViewContainer; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.View; +import org.springframework.web.servlet.mvc.LastModified; import org.springframework.web.servlet.mvc.annotation.ModelAndViewResolver; import org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter; import org.springframework.web.servlet.mvc.method.annotation.support.DefaultMethodReturnValueHandler; @@ -432,6 +434,12 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i Void.TYPE.equals(methodReturnType.getParameterType())); } + /** + * This method always returns -1 since {@link HandlerMethod} does not implement {@link LastModified}. + * Instead an @{@link RequestMapping} method, calculate the lastModified value, and call + * {@link WebRequest#checkNotModified(long)}, and return {@code null} if that returns {@code true}. + * @see WebRequest#checkNotModified(long) + */ @Override protected long getLastModifiedInternal(HttpServletRequest request, HandlerMethod handlerMethod) { return -1; diff --git a/spring-framework-reference/src/mvc.xml b/spring-framework-reference/src/mvc.xml index 7059dce44fb..4a60c74079d 100644 --- a/spring-framework-reference/src/mvc.xml +++ b/spring-framework-reference/src/mvc.xml @@ -790,7 +790,7 @@ public class ClinicController {
http://www.example.com/users/fred./owners/fred, the value
- "/spring-web/spring-web-3.0.5.jar".
+ How do you break it down into multiple parts?{varName:regex} where the first part defines the
+ variable name and the second - the regular expression.For example:request.checkNotModified(lastModified)
+ and returning