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

Spring Boot 3.2.4中@WebMvcTest测试Thymeleaf时HttpServletRequest为空问题

问题解答

不需要手动Mock HttpServletRequest对象,问题根源是Spring Boot 3对@WebMvcTest的自动配置逻辑发生了变化,导致Thymeleaf模板在测试环境中无法正常获取到请求对象。下面给你几个可行的解决办法:

方法1:修改Thymeleaf模板的表达式

把模板中依赖#httpServletRequest的代码替换成Thymeleaf提供的通用#request对象,这个对象在测试和生产环境中都能正常工作:

<a class="nav-link nav-link--header"
   th:href="@{operations/admin}"
   th:classappend="${#request.getRequestURI().contains('admin')} ? 'nav-link--active' : ''">
   <span class="text-underline">Administration</span>
</a>

方法2:在测试类中绑定请求上下文

在你的OperationsControllerTest中,通过RequestContextHolder手动将Mock请求对象绑定到上下文,确保Thymeleaf渲染时能拿到请求信息:

@WebMvcTest(OperationsController.class)
public class OperationsControllerTest extends BaseWebTest {

    @Autowired
    private MockHttpServletRequest request;

    @BeforeEach
    void setUp() {
        RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
    }

    // 你的测试方法...
}

方法3:切换到完整Web环境测试(备选)

如果上述方法都不生效,可以用@SpringBootTest替代@WebMvcTest,启动完整的Web环境来测试,缺点是测试启动速度会变慢:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class OperationsControllerTest extends BaseWebTest {

    @Autowired
    private MockMvc mockMvc;

    // 你的测试方法...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 20:42:51