docs: @Override
  	@SuppressWarnings({ "rawtypes", "unchecked" })
  	public void handleReturnValue(@Nullable Object returnValue, MethodParameter returnType,
  			ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
  
  		Object value = returnValue;
  
  		if (returnValue instanceof HttpEntity) {
  			value = ((HttpEntity<?>) returnValue).getBody();
  		}
  
  		// No post-processable type found - proceed with delegate
  		if (!(value instanceof RepresentationModel)) {
  			delegate.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
  			return;
  		}
  
  		Method method = returnType.getMethod();
  
  		if (method == null) {
  			throw new IllegalStateException(String.format("Return type %s does not expose a method!", returnType));
  		}
  
  		// We have a Resource or Resources - find suitable processors
  		ResolvableType targetType = ResolvableType.forMethodReturnType(method);
  
  		// Unbox HttpEntity
  		if (HTTP_ENTITY_TYPE.isAssignableFrom(targetType)) {
  			targetType = targetType.getGeneric(0);
  		}
  
  		ResolvableType returnValueType = ResolvableType.forClass(value.getClass());
  
  		// Returned value is actually of a more specific type, use this type information
  		if (!getRawType(targetType).equals(getRawType(returnValueType))) {
  			targetType = returnValueType;
  		}
  
  		RepresentationModel<?> result = invoker.invokeProcessorsFor((RepresentationModel) value, targetType);
  		delegate.handleReturnValue(rewrapResult(result, returnValue), returnType, mavContainer, webRequest);
  	}