diff --git a/template/insiis-web/src/main/java/com/vs/VSResponseHandlerConfig.java b/template/insiis-web/src/main/java/com/vs/VSResponseHandlerConfig.java index e83c0cd..f6d3454 100644 --- a/template/insiis-web/src/main/java/com/vs/VSResponseHandlerConfig.java +++ b/template/insiis-web/src/main/java/com/vs/VSResponseHandlerConfig.java @@ -1,20 +1,42 @@ package com.vs; import com.vs.common.util.rpc.handler.CustomArgumentResolver; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; +import org.springframework.web.method.annotation.MapMethodProcessor; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.HandlerMethodReturnValueHandler; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; +import org.springframework.web.servlet.mvc.method.annotation.ViewNameMethodReturnValueHandler; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; @Configuration public class VSResponseHandlerConfig implements WebMvcConfigurer { - @Value("${com.toco.response.handler:true}") - private boolean useHandler; + private boolean useHandler = true; + RequestMappingHandlerAdapter requestMappingHandlerAdapter; + + void init() { + List returnValueHandlers = this.requestMappingHandlerAdapter.getReturnValueHandlers(); + Iterator iterator = returnValueHandlers.iterator(); + List newProcessors = new ArrayList<>(); + while (iterator.hasNext()) { + HandlerMethodReturnValueHandler next = iterator.next(); + //在controller中直接返回map,不被默认的MapMethodProcessor拦截 + if (next instanceof MapMethodProcessor || + //在controller中直接返回String,不被默认的ViewNameMethodReturnValueHandler拦截 + next instanceof ViewNameMethodReturnValueHandler) { + continue; + } else { + newProcessors.add(next); + } + } + this.requestMappingHandlerAdapter.setReturnValueHandlers(newProcessors); + } @Override public void addArgumentResolvers(List resolvers) {