这是我使用的实现:
public class metadataInjectingReturnValueHandler implements HandlerMethodReturnValueHandler { private final HandlerMethodReturnValueHandler delegate; public metadataInjectingReturnValueHandler(HandlerMethodReturnValueHandler delegate) { this.delegate = delegate; } @Override public boolean supportsReturnType(MethodParameter returnType) { return delegate.supportsReturnType(returnType); } @Override public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { returnValue = wrapResult(returnValue); //Omitted delegate.handleReturnValue(returnValue, returnType, mavContainer, webRequest); }}@Componentpublic class metadataInjectionFactoryBean implements InitializingBean { @Autowired private RequestMappingHandlerAdapter adapter; @Override public void afterPropertiesSet() throws Exception { HandlerMethodReturnValueHandlerComposite returnValueHandlers = adapter.getReturnValueHandlers(); List<HandlerMethodReturnValueHandler> handlers = Lists.newArrayList(returnValueHandlers.getHandlers()); decorateHandlers(handlers); adapter.setReturnValueHandlers(handlers); } private void decorateHandlers(List<HandlerMethodReturnValueHandler> handlers) { for (HandlerMethodReturnValueHandler handler : handlers) { if (handler instanceof RequestResponseBodyMethodProcessor) { metadataInjectingReturnValueHandler decorator = new metadataInjectingReturnValueHandler(handler); int index = handlers.indexOf(handler); handlers.set(index, decorator); log.info("metadata Injecting decorator wired up"); break; } }}}


