From af972d2c14e77427da0738549048e377597d472c Mon Sep 17 00:00:00 2001 From: oyo Date: Tue, 11 Feb 2025 18:44:16 +0800 Subject: [PATCH] VSResponseHandlerConfig fix --- .../java/com/vs/VSResponseHandlerConfig.java | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) 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) {