HandlerMethodReturnValueHandler 不起作用

问题描述 投票:0回答:1

在我的 Spring Boot 项目中,我创建了一个扩展类

HandlerMethodReturnValueHandler

使用以下代码(为简洁起见,进行了简化)

public class ModelResolver implements HandlerMethodArgumentResolver, HandlerMethodReturnValueHandler {
    @Override
    public boolean supportsReturnType(MethodParameter returnType) {
        return true;
    }
    @Override
    public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
        //Some code
    }
}

然后在我的 Config 类中做了:

@Configuration
@EnableAutoConfiguration
public class Config implements WebMvcConfigurer {
    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
        handlers.add(new ModelResolver());
    }
}

然后在我的集成测试方法中,简单地创建了一个如下所示的mockMvc

MvcResult mvcResult = mockMvc.perform(post(BASE_URL + "create"))
                .andExpect(status().isBadRequest())
                .andReturn();

但是

handleReturnValue
没有被调用。

我在配置的

addReturnValueHandlers
以及
supportsReturnType
handleReturnValue
中放置了断点。

addReturnValueHandlers
里面的那个被抓住了,但是
supportsReturnType
handleReturnValue
都没有被抓住!

你们有什么想法吗?

java spring-boot spring-mvc
1个回答
0
投票
@Autowired
private lateinit var requestMappingHandlerAdapter: RequestMappingHandlerAdapter

@PostConstruct
fun init() {
        requestMappingHandlerAdapter.returnValueHandlers?.let { returnValueHandlers ->
            val newReturnValueHandlers = ArrayList<HandlerMethodReturnValueHandler>(returnValueHandlers.size + 1)
            newReturnValueHandlers.add(0, ApiReturnHandler(requestMappingHandlerAdapter.messageConverters))
            newReturnValueHandlers.addAll(returnValueHandlers)
            requestMappingHandlerAdapter.returnValueHandlers = newReturnValueHandlers
        }

    }
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.