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

Spring Boot MockMvc POST请求无法进入真实Controller方法问题

问题排查与解决方案

从你提供的代码和日志来看,测试请求无法进入Controller方法的核心原因是请求路径不匹配,Spring找不到对应的映射路由。我来一步步帮你梳理:

1. 先看日志和测试代码的路径矛盾

日志里显示实际请求的URI是/server/getTransaction/123,但你的测试代码里写的请求路径是/nfp-server/getTransaction/{transactionUuid}——这两个前缀明显不一样,说明要么是你的Controller类有统一的路径前缀,要么是测试代码里的路径写错了。

2. 检查Controller类的级别路径注解

你的方法上只加了方法级的@PostMapping("/getTransaction/{transactionUuid}"),如果Controller类本身还有类级别的@RequestMapping注解,比如:

@RequestMapping("/server")
public class TransactionController {
    // 你的getTransaction方法
}

那这个Controller下所有方法的完整路径都会带上/server前缀,而你测试里用的/nfp-server就完全不匹配,自然找不到对应的方法。

3. 修复步骤

方案一:修正测试代码的路径

把测试里的请求路径改成和Controller实际映射一致的前缀,比如如果Controller类前缀是/server,测试代码就改成:

mockMvc.perform(post("/server/getTransaction/{transactionUuid}", "123"))
       .andDo(print());

方案二:打印所有请求映射确认路径

如果你不确定Controller的完整映射路径,可以在测试类里注入RequestMappingHandlerMapping,打印所有已注册的请求映射:

@Autowired
private RequestMappingHandlerMapping handlerMapping;

@Test
public void printAllRequestMappings() {
    handlerMapping.getHandlerMethods().forEach((requestMappingInfo, handlerMethod) -> {
        System.out.println("完整请求路径:" + requestMappingInfo.getPatternsCondition());
        System.out.println("对应方法:" + handlerMethod.getMethod().getName());
    });
}

运行这个测试,就能看到你的getTransaction方法对应的完整请求路径,然后让测试里的路径和它完全一致。

4. 额外确认点

你的Controller方法用的是POST请求,测试里也用了mockMvc.perform(post(...)),这部分请求方法是匹配的,不用调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:24:54