private HandlerMethodReturnValueHandler getReturnValueHandler(MethodParameter returnType) {
   for (HandlerMethodReturnValueHandler handler : this.returnValueHandlers) {
     if (handler.supportsReturnType(returnType)) {
       return handler;
     }
   }
   return null;
 }
 /**
  * Iterate over registered {@link HandlerMethodReturnValueHandler}s and invoke the one that
  * supports it.
  *
  * @exception IllegalStateException if no suitable {@link HandlerMethodReturnValueHandler} is
  *     found.
  */
 public void handleReturnValue(
     Object returnValue,
     MethodParameter returnType,
     ModelAndViewContainer mavContainer,
     NativeWebRequest webRequest)
     throws Exception {
   HandlerMethodReturnValueHandler handler = getReturnValueHandler(returnType);
   Assert.notNull(
       handler, "Unknown return value type [" + returnType.getParameterType().getName() + "]");
   handler.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
 }
  @Override
  public void handleReturnValue(Object returnValue, MethodParameter returnType, Message<?> message)
      throws Exception {

    HandlerMethodReturnValueHandler handler = getReturnValueHandler(returnType);
    Assert.notNull(
        handler,
        "No handler for return value type [" + returnType.getParameterType().getName() + "]");
    if (logger.isTraceEnabled()) {
      logger.trace("Processing return value with " + handler);
    }
    handler.handleReturnValue(returnValue, returnType, message);
  }
 /**
  * Find a registered {@link HandlerMethodReturnValueHandler} that supports the given return type.
  */
 private HandlerMethodReturnValueHandler getReturnValueHandler(MethodParameter returnType) {
   HandlerMethodReturnValueHandler result = this.returnValueHandlerCache.get(returnType);
   if (result == null) {
     for (HandlerMethodReturnValueHandler returnValueHandler : returnValueHandlers) {
       if (logger.isTraceEnabled()) {
         logger.trace(
             "Testing if return value handler ["
                 + returnValueHandler
                 + "] supports ["
                 + returnType.getGenericParameterType()
                 + "]");
       }
       if (returnValueHandler.supportsReturnType(returnType)) {
         result = returnValueHandler;
         this.returnValueHandlerCache.put(returnType, returnValueHandler);
         break;
       }
     }
   }
   return result;
 }