@ -1,5 +1,5 @@
/ *
/ *
* Copyright 2002 - 2017 the original author or authors .
* Copyright 2002 - 2018 the original author or authors .
*
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* you may not use this file except in compliance with the License .
@ -21,8 +21,11 @@ import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type ;
import java.lang.reflect.Type ;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.Collections ;
import java.util.Collections ;
import java.util.EnumSet ;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.Map ;
import java.util.Set ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
import javax.servlet.http.HttpServletResponse ;
@ -66,6 +69,8 @@ import org.springframework.web.servlet.support.RequestContextUtils;
* /
* /
public class HttpEntityMethodProcessor extends AbstractMessageConverterMethodProcessor {
public class HttpEntityMethodProcessor extends AbstractMessageConverterMethodProcessor {
private static final Set < HttpMethod > SAFE_METHODS = EnumSet . of ( HttpMethod . GET , HttpMethod . HEAD ) ;
/ * *
/ * *
* Basic constructor with converters only . Suitable for resolving
* Basic constructor with converters only . Suitable for resolving
* { @code HttpEntity } . For handling { @code ResponseEntity } consider also
* { @code HttpEntity } . For handling { @code ResponseEntity } consider also
@ -199,7 +204,8 @@ public class HttpEntityMethodProcessor extends AbstractMessageConverterMethodPro
int returnStatus = ( ( ResponseEntity < ? > ) responseEntity ) . getStatusCodeValue ( ) ;
int returnStatus = ( ( ResponseEntity < ? > ) responseEntity ) . getStatusCodeValue ( ) ;
outputMessage . getServletResponse ( ) . setStatus ( returnStatus ) ;
outputMessage . getServletResponse ( ) . setStatus ( returnStatus ) ;
if ( returnStatus = = 200 ) {
if ( returnStatus = = 200 ) {
if ( isResourceNotModified ( inputMessage , outputMessage ) ) {
if ( SAFE_METHODS . contains ( inputMessage . getMethod ( ) )
& & isResourceNotModified ( inputMessage , outputMessage ) ) {
// Ensure headers are flushed, no body should be written.
// Ensure headers are flushed, no body should be written.
outputMessage . flush ( ) ;
outputMessage . flush ( ) ;
// Skip call to converters, as they may update the body.
// Skip call to converters, as they may update the body.