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; }