在我的 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
都没有被抓住!
你们有什么想法吗?
@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
}
}