Browse Source

Fix condition in ServletInvocableHandlerMethod

Closes gh-23775
pull/27217/head
Rossen Stoyanchev 6 years ago
parent
commit
2e4944198d
  1. 2
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java
  2. 19
      spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java

2
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java

@ -165,7 +165,7 @@ public class ServletInvocableHandlerMethod extends InvocableHandlerMethod { @@ -165,7 +165,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("ETag"))) {

19
spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -31,6 +31,7 @@ import reactor.core.publisher.Flux; @@ -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; @@ -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;
@ -139,6 +141,21 @@ public class ServletInvocableHandlerMethodTests { @@ -139,6 +141,21 @@ public class ServletInvocableHandlerMethodTests {
this.mavContainer.isRequestHandled());
}
@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);
assertTrue("Null return value + 'not modified' request should result in 'request handled'",
this.mavContainer.isRequestHandled());
assertEquals(true, this.request.getAttribute(ShallowEtagHeaderFilter.class.getName() + ".STREAMING"));
}
@Test // SPR-9159
public void invokeAndHandle_NotVoidWithResponseStatusAndReason() throws Exception {
ServletInvocableHandlerMethod handlerMethod = getHandlerMethod(new Handler(), "responseStatusWithReason");

Loading…
Cancel
Save