|
|
|
@ -20,8 +20,10 @@ import java.lang.reflect.Method;
@@ -20,8 +20,10 @@ import java.lang.reflect.Method;
|
|
|
|
|
import java.net.URI; |
|
|
|
|
import java.nio.charset.Charset; |
|
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Collections; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Locale; |
|
|
|
|
import java.util.TimeZone; |
|
|
|
|
|
|
|
|
@ -48,9 +50,18 @@ import org.springframework.web.bind.annotation.RequestMapping;
@@ -48,9 +50,18 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
|
import org.springframework.web.context.request.ServletWebRequest; |
|
|
|
|
import org.springframework.web.method.support.ModelAndViewContainer; |
|
|
|
|
|
|
|
|
|
import static org.junit.Assert.*; |
|
|
|
|
import static org.mockito.BDDMockito.*; |
|
|
|
|
import static org.springframework.web.servlet.HandlerMapping.*; |
|
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
|
|
import static org.junit.Assert.assertFalse; |
|
|
|
|
import static org.junit.Assert.assertTrue; |
|
|
|
|
import static org.junit.Assert.fail; |
|
|
|
|
import static org.mockito.BDDMockito.any; |
|
|
|
|
import static org.mockito.BDDMockito.eq; |
|
|
|
|
import static org.mockito.BDDMockito.given; |
|
|
|
|
import static org.mockito.BDDMockito.isA; |
|
|
|
|
import static org.mockito.BDDMockito.mock; |
|
|
|
|
import static org.mockito.BDDMockito.reset; |
|
|
|
|
import static org.mockito.BDDMockito.verify; |
|
|
|
|
import static org.springframework.web.servlet.HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Test fixture for {@link HttpEntityMethodProcessor} delegating to a mock |
|
|
|
@ -96,11 +107,14 @@ public class HttpEntityMethodProcessorMockTests {
@@ -96,11 +107,14 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
|
|
|
|
|
messageConverter = mock(HttpMessageConverter.class); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
|
|
|
|
|
processor = new HttpEntityMethodProcessor(Collections.<HttpMessageConverter<?>>singletonList(messageConverter)); |
|
|
|
|
List<HttpMessageConverter<?>> converters = new ArrayList<>(); |
|
|
|
|
converters.add(messageConverter); |
|
|
|
|
processor = new HttpEntityMethodProcessor(converters); |
|
|
|
|
reset(messageConverter); |
|
|
|
|
|
|
|
|
|
Method handle1 = getClass().getMethod("handle1", HttpEntity.class, ResponseEntity.class, Integer.TYPE, RequestEntity.class); |
|
|
|
|
Method handle1 = getClass().getMethod("handle1", HttpEntity.class, ResponseEntity.class, |
|
|
|
|
Integer.TYPE, RequestEntity.class); |
|
|
|
|
|
|
|
|
|
paramHttpEntity = new MethodParameter(handle1, 0); |
|
|
|
|
paramRequestEntity = new MethodParameter(handle1, 3); |
|
|
|
|
paramResponseEntity = new MethodParameter(handle1, 1); |
|
|
|
@ -205,14 +219,12 @@ public class HttpEntityMethodProcessorMockTests {
@@ -205,14 +219,12 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnValue() throws Exception { |
|
|
|
|
String body = "Foo"; |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>(body, HttpStatus.OK); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>(body, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
MediaType accepted = MediaType.TEXT_PLAIN; |
|
|
|
|
servletRequest.addHeader("Accept", accepted.toString()); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, accepted)).willReturn(true); |
|
|
|
|
initStringMessageConversion(accepted); |
|
|
|
|
|
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
@ -223,7 +235,7 @@ public class HttpEntityMethodProcessorMockTests {
@@ -223,7 +235,7 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnValueProduces() throws Exception { |
|
|
|
|
String body = "Foo"; |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>(body, HttpStatus.OK); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>(body, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
servletRequest.addHeader("Accept", "text/*"); |
|
|
|
|
servletRequest.setAttribute(PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, Collections.singleton(MediaType.TEXT_HTML)); |
|
|
|
@ -263,7 +275,7 @@ public class HttpEntityMethodProcessorMockTests {
@@ -263,7 +275,7 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
@Test(expected = HttpMediaTypeNotAcceptableException.class) |
|
|
|
|
public void handleReturnValueNotAcceptable() throws Exception { |
|
|
|
|
String body = "Foo"; |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>(body, HttpStatus.OK); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>(body, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
MediaType accepted = MediaType.APPLICATION_ATOM_XML; |
|
|
|
|
servletRequest.addHeader("Accept", accepted.toString()); |
|
|
|
@ -280,7 +292,7 @@ public class HttpEntityMethodProcessorMockTests {
@@ -280,7 +292,7 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
@Test(expected = HttpMediaTypeNotAcceptableException.class) |
|
|
|
|
public void handleReturnValueNotAcceptableProduces() throws Exception { |
|
|
|
|
String body = "Foo"; |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>(body, HttpStatus.OK); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>(body, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
MediaType accepted = MediaType.TEXT_PLAIN; |
|
|
|
|
servletRequest.addHeader("Accept", accepted.toString()); |
|
|
|
@ -298,7 +310,7 @@ public class HttpEntityMethodProcessorMockTests {
@@ -298,7 +310,7 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
|
|
|
|
|
@Test(expected=HttpMediaTypeNotAcceptableException.class) |
|
|
|
|
public void handleReturnValueNotAcceptableParseError() throws Exception { |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("Body", HttpStatus.ACCEPTED); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("Body", HttpStatus.ACCEPTED); |
|
|
|
|
servletRequest.addHeader("Accept", "01"); |
|
|
|
|
|
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
@ -306,10 +318,10 @@ public class HttpEntityMethodProcessorMockTests {
@@ -306,10 +318,10 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void responseHeaderNoBody() throws Exception { |
|
|
|
|
public void handleReturnValueResponseHeaderNoBody() throws Exception { |
|
|
|
|
HttpHeaders headers = new HttpHeaders(); |
|
|
|
|
headers.set("headerName", "headerValue"); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>(headers, HttpStatus.ACCEPTED); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>(headers, HttpStatus.ACCEPTED); |
|
|
|
|
|
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
@ -318,15 +330,12 @@ public class HttpEntityMethodProcessorMockTests {
@@ -318,15 +330,12 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void responseHeaderAndBody() throws Exception { |
|
|
|
|
public void handleReturnValueResponseHeaderAndBody() throws Exception { |
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.set("header", "headerValue"); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.ACCEPTED); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.ACCEPTED); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
ArgumentCaptor<HttpOutputMessage> outputMessage = ArgumentCaptor.forClass(HttpOutputMessage.class); |
|
|
|
@ -336,18 +345,15 @@ public class HttpEntityMethodProcessorMockTests {
@@ -336,18 +345,15 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnTypeLastModified() throws Exception { |
|
|
|
|
public void handleReturnValueLastModified() throws Exception { |
|
|
|
|
long currentTime = new Date().getTime(); |
|
|
|
|
long oneMinuteAgo = currentTime - (1000 * 60); |
|
|
|
|
servletRequest.addHeader(HttpHeaders.IF_MODIFIED_SINCE, dateFormat.format(currentTime)); |
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.setDate(HttpHeaders.LAST_MODIFIED, oneMinuteAgo); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
assertResponseNotModified(); |
|
|
|
@ -356,17 +362,14 @@ public class HttpEntityMethodProcessorMockTests {
@@ -356,17 +362,14 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnTypeEtag() throws Exception { |
|
|
|
|
public void handleReturnValueEtag() throws Exception { |
|
|
|
|
String etagValue = "\"deadb33f8badf00d\""; |
|
|
|
|
servletRequest.addHeader(HttpHeaders.IF_NONE_MATCH, etagValue); |
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.set(HttpHeaders.ETAG, etagValue); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
assertResponseNotModified(); |
|
|
|
@ -375,7 +378,7 @@ public class HttpEntityMethodProcessorMockTests {
@@ -375,7 +378,7 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnTypeETagAndLastModified() throws Exception { |
|
|
|
|
public void handleReturnValueETagAndLastModified() throws Exception { |
|
|
|
|
long currentTime = new Date().getTime(); |
|
|
|
|
long oneMinuteAgo = currentTime - (1000 * 60); |
|
|
|
|
String etagValue = "\"deadb33f8badf00d\""; |
|
|
|
@ -384,12 +387,9 @@ public class HttpEntityMethodProcessorMockTests {
@@ -384,12 +387,9 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.setDate(HttpHeaders.LAST_MODIFIED, oneMinuteAgo); |
|
|
|
|
responseHeaders.set(HttpHeaders.ETAG, etagValue); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
assertResponseNotModified(); |
|
|
|
@ -400,19 +400,16 @@ public class HttpEntityMethodProcessorMockTests {
@@ -400,19 +400,16 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnTypeNotModified() throws Exception { |
|
|
|
|
public void handleReturnValueNotModified() throws Exception { |
|
|
|
|
long currentTime = new Date().getTime(); |
|
|
|
|
long oneMinuteAgo = currentTime - (1000 * 60); |
|
|
|
|
String etagValue = "\"deadb33f8badf00d\""; |
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.setDate(HttpHeaders.LAST_MODIFIED, oneMinuteAgo); |
|
|
|
|
responseHeaders.set(HttpHeaders.ETAG, etagValue); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.NOT_MODIFIED); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.NOT_MODIFIED); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
assertResponseNotModified(); |
|
|
|
@ -422,14 +419,8 @@ public class HttpEntityMethodProcessorMockTests {
@@ -422,14 +419,8 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
assertEquals(etagValue, servletResponse.getHeader(HttpHeaders.ETAG)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void assertResponseNotModified() { |
|
|
|
|
assertTrue(mavContainer.isRequestHandled()); |
|
|
|
|
assertEquals(HttpStatus.NOT_MODIFIED.value(), servletResponse.getStatus()); |
|
|
|
|
assertEquals(0, servletResponse.getContentAsByteArray().length); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnTypeChangedETagAndLastModified() throws Exception { |
|
|
|
|
public void handleReturnValueChangedETagAndLastModified() throws Exception { |
|
|
|
|
long currentTime = new Date().getTime(); |
|
|
|
|
long oneMinuteAgo = currentTime - (1000 * 60); |
|
|
|
|
String etagValue = "\"deadb33f8badf00d\""; |
|
|
|
@ -439,12 +430,9 @@ public class HttpEntityMethodProcessorMockTests {
@@ -439,12 +430,9 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.setDate(HttpHeaders.LAST_MODIFIED, oneMinuteAgo); |
|
|
|
|
responseHeaders.set(HttpHeaders.ETAG, changedEtagValue); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
assertTrue(mavContainer.isRequestHandled()); |
|
|
|
@ -458,19 +446,16 @@ public class HttpEntityMethodProcessorMockTests {
@@ -458,19 +446,16 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
|
|
|
|
|
// SPR-13496
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnTypePostRequestWithIfNotModified() throws Exception { |
|
|
|
|
public void handleReturnValuePostRequestWithIfNotModified() throws Exception { |
|
|
|
|
String wildcardValue = "*"; |
|
|
|
|
String etagValue = "\"some-etag\""; |
|
|
|
|
servletRequest.setMethod("POST"); |
|
|
|
|
servletRequest.addHeader(HttpHeaders.IF_NONE_MATCH, wildcardValue); |
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.set(HttpHeaders.ETAG, etagValue); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
assertResponseOkWithBody("body"); |
|
|
|
@ -480,18 +465,15 @@ public class HttpEntityMethodProcessorMockTests {
@@ -480,18 +465,15 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
|
|
|
|
|
// SPR-13626
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnTypeGetIfNoneMatchWildcard() throws Exception { |
|
|
|
|
public void handleReturnValueGetIfNoneMatchWildcard() throws Exception { |
|
|
|
|
String wildcardValue = "*"; |
|
|
|
|
String etagValue = "\"some-etag\""; |
|
|
|
|
servletRequest.addHeader(HttpHeaders.IF_NONE_MATCH, wildcardValue); |
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.set(HttpHeaders.ETAG, etagValue); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
assertResponseOkWithBody("body"); |
|
|
|
@ -501,18 +483,15 @@ public class HttpEntityMethodProcessorMockTests {
@@ -501,18 +483,15 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
|
|
|
|
|
// SPR-13626
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnTypeIfNoneMatchIfMatch() throws Exception { |
|
|
|
|
public void handleReturnValueIfNoneMatchIfMatch() throws Exception { |
|
|
|
|
String etagValue = "\"some-etag\""; |
|
|
|
|
servletRequest.addHeader(HttpHeaders.IF_NONE_MATCH, etagValue); |
|
|
|
|
servletRequest.addHeader(HttpHeaders.IF_MATCH, "ifmatch"); |
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.set(HttpHeaders.ETAG, etagValue); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
assertResponseOkWithBody("body"); |
|
|
|
@ -522,18 +501,15 @@ public class HttpEntityMethodProcessorMockTests {
@@ -522,18 +501,15 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
|
|
|
|
|
// SPR-13626
|
|
|
|
|
@Test |
|
|
|
|
public void handleReturnTypeIfNoneMatchIfUnmodifiedSince() throws Exception { |
|
|
|
|
public void handleReturnValueIfNoneMatchIfUnmodifiedSince() throws Exception { |
|
|
|
|
String etagValue = "\"some-etag\""; |
|
|
|
|
servletRequest.addHeader(HttpHeaders.IF_NONE_MATCH, etagValue); |
|
|
|
|
servletRequest.addHeader(HttpHeaders.IF_UNMODIFIED_SINCE, dateFormat.format(new Date().getTime())); |
|
|
|
|
HttpHeaders responseHeaders = new HttpHeaders(); |
|
|
|
|
responseHeaders.set(HttpHeaders.ETAG, etagValue); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
|
ResponseEntity<String> returnValue = new ResponseEntity<>("body", responseHeaders, HttpStatus.OK); |
|
|
|
|
|
|
|
|
|
initStringMessageConversion(MediaType.TEXT_PLAIN); |
|
|
|
|
processor.handleReturnValue(returnValue, returnTypeResponseEntity, mavContainer, webRequest); |
|
|
|
|
|
|
|
|
|
assertResponseOkWithBody("body"); |
|
|
|
@ -541,11 +517,23 @@ public class HttpEntityMethodProcessorMockTests {
@@ -541,11 +517,23 @@ public class HttpEntityMethodProcessorMockTests {
|
|
|
|
|
assertEquals(etagValue, servletResponse.getHeader(HttpHeaders.ETAG)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void initStringMessageConversion(MediaType accepted) { |
|
|
|
|
given(messageConverter.canWrite(String.class, null)).willReturn(true); |
|
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
|
given(messageConverter.canWrite(String.class, accepted)).willReturn(true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void assertResponseNotModified() { |
|
|
|
|
assertTrue(mavContainer.isRequestHandled()); |
|
|
|
|
assertEquals(HttpStatus.NOT_MODIFIED.value(), servletResponse.getStatus()); |
|
|
|
|
assertEquals(0, servletResponse.getContentAsByteArray().length); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void assertResponseOkWithBody(String body) throws Exception { |
|
|
|
|
assertTrue(mavContainer.isRequestHandled()); |
|
|
|
|
assertEquals(HttpStatus.OK.value(), servletResponse.getStatus()); |
|
|
|
|
ArgumentCaptor<HttpOutputMessage> outputMessage = ArgumentCaptor.forClass(HttpOutputMessage.class); |
|
|
|
|
verify(messageConverter).write(eq("body"), eq(MediaType.TEXT_PLAIN), outputMessage.capture()); |
|
|
|
|
verify(messageConverter).write(eq(body), eq(MediaType.TEXT_PLAIN), outputMessage.capture()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@SuppressWarnings("unused") |
|
|
|
|