You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mockito测试中清理重定向URL的问题咨询

解决MockMvc测试重定向URL带公共@ModelAttribute属性的问题

我之前也碰到过一模一样的麻烦!用@ControllerAdvice里的@ModelAttribute给九成控制器加了公共属性,虽然靠ignoreDefaultModelOnRedirect在生产环境里清理了重定向URL的冗余属性,但MockMvc测试时这些属性还是会粘在URL上,断言起来特别闹心。下面给你几个实用的解决办法:

1. 全局配置MockMvc忽略默认模型重定向属性

在构建MockMvc的时候直接开启全局忽略,所有测试请求的重定向都会自动去掉公共属性:

MockMvc mockMvc = MockMvcBuilders.standaloneSetup(yourTargetController)
    .setControllerAdvice(yourGlobalControllerAdvice)
    // 关键配置:开启忽略默认模型的重定向属性
    .setIgnoreDefaultModelOnRedirect(true)
    .build();

之后断言重定向URL时,直接写目标路径就行,不用再管那些公共属性:

mockMvc.perform(post("/submit-form"))
    .andExpect(status().is3xxRedirection())
    .andExpect(redirectedUrl("/success-page")); // 完美匹配不含公共属性的URL

2. 单个请求单独配置忽略

如果不想全局生效,只想给特定测试请求忽略默认模型属性,可以用with(ignoreDefaultModelOnRedirect())单独设置:

mockMvc.perform(post("/submit-form")
        .param("userInput", "test-value")
        // 仅这个请求忽略重定向时的默认模型属性
        .with(ignoreDefaultModelOnRedirect()))
    .andExpect(status().isFound())
    .andExpect(redirectedUrl("/success-page"));

3. Spring Boot @WebMvcTest场景下的配置

要是你用Spring Boot的@WebMvcTest做切片测试,可以通过自定义MockMvcBuilder来全局配置:

@WebMvcTest(YourController.class)
@Import(YourGlobalControllerAdvice.class)
class YourControllerTest {

    @Autowired
    private MockMvc mockMvc;

    // 自定义MockMvcBuilder,全局开启忽略
    @Bean
    public MockMvcBuilder mockMvcBuilder() {
        return MockMvcBuilders.standaloneSetup(new YourController())
                .setControllerAdvice(new YourGlobalControllerAdvice())
                .setIgnoreDefaultModelOnRedirect(true);
    }

    @Test
    void testRedirectWithoutCommonAttributes() throws Exception {
        mockMvc.perform(post("/submit"))
            .andExpect(status().is3xxRedirection())
            .andExpect(redirectedUrl("/success"));
    }
}

问题根源说明

其实ignoreDefaultModelOnRedirect的控制器配置只针对生产环境的请求处理,MockMvc的默认测试配置并不会自动继承这个行为——我们得显式告诉测试环境:重定向时别把默认模型里的公共属性拼到URL上。

内容的提问来源于stack exchange,提问作者narsereg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:44:33