package com.asual.summer.core.spring; import java.util.LinkedList; import java.util.List; import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; import org.springframework.web.method.support.HandlerMethodReturnValueHandler; import org.springframework.web.method.support.InvocableHandlerMethod; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.ServletRequestDataBinderFactory; public class ExtendedRequestMappingHandlerAdapter extends RequestMappingHandlerAdapter{ private HandlerMethodReturnValueHandler customHandlerMethodReturnValueHandler; protected ServletRequestDataBinderFactory createDataBinderFactory(List<InvocableHandlerMethod> binderMethods) throws Exception { return new ExtendedServletRequestDataBinderFactory(binderMethods, getWebBindingInitializer()); } public ExtendedRequestMappingHandlerAdapter(){ super(); getMessageConverters().add(new MappingJacksonHttpMessageConverter()); } public void setCustomHandlerMethodReturnValueHandler(HandlerMethodReturnValueHandler handler){ this.customHandlerMethodReturnValueHandler = handler; } @Override public void afterPropertiesSet() { super.afterPropertiesSet(); List<HandlerMethodReturnValueHandler> handlers = new LinkedList<HandlerMethodReturnValueHandler>(); handlers.add(customHandlerMethodReturnValueHandler); if(super.getReturnValueHandlers() != null){ handlers.addAll(super.getReturnValueHandlers().getHandlers()); } super.setReturnValueHandlers(handlers); } }