Fix condition in ServletInvocableHandlerMethod

Closes gh-23775
This commit is contained in:
Rossen Stoyanchev 2019-11-06 15:36:25 +00:00
parent 29b31cad48
commit 9960ed55aa
2 changed files with 23 additions and 2 deletions

View File

@ -166,7 +166,7 @@ public class ServletInvocableHandlerMethod extends InvocableHandlerMethod {
}
private void disableContentCachingIfNecessary(ServletWebRequest webRequest) {
if (!isRequestNotModified(webRequest)) {
if (isRequestNotModified(webRequest)) {
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
Assert.notNull(response, "Expected HttpServletResponse");
if (StringUtils.hasText(response.getHeader(HttpHeaders.ETAG))) {

View File

@ -31,6 +31,7 @@ import reactor.core.publisher.Flux;
import org.springframework.core.MethodParameter;
import org.springframework.core.ResolvableType;
import org.springframework.core.annotation.AliasFor;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
@ -46,6 +47,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.filter.ShallowEtagHeaderFilter;
import org.springframework.web.method.annotation.RequestParamMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodArgumentResolverComposite;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
@ -130,7 +132,26 @@ public class ServletInvocableHandlerMethodTests {
ServletInvocableHandlerMethod handlerMethod = getHandlerMethod(new Handler(), "notModified");
handlerMethod.invokeAndHandle(this.webRequest, this.mavContainer);
assertThat(this.mavContainer.isRequestHandled()).as("Null return value + 'not modified' request should result in 'request handled'").isTrue();
assertThat(this.mavContainer.isRequestHandled())
.as("Null return value + 'not modified' request should result in 'request handled'")
.isTrue();
}
@Test // gh-23775
public void invokeAndHandle_VoidNotModifiedWithEtag() throws Exception {
String etag = "\"deadb33f8badf00d\"";
this.request.addHeader(HttpHeaders.IF_NONE_MATCH, etag);
this.webRequest.checkNotModified(etag);
ServletInvocableHandlerMethod handlerMethod = getHandlerMethod(new Handler(), "notModified");
handlerMethod.invokeAndHandle(this.webRequest, this.mavContainer);
assertThat(this.mavContainer.isRequestHandled())
.as("Null return value + 'not modified' request should result in 'request handled'")
.isTrue();
assertThat(this.request.getAttribute(ShallowEtagHeaderFilter.class.getName() + ".STREAMING"))
.isEqualTo(true);
}
@Test // SPR-9159