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

Spring Boot Delete接口测试预期204却返回404问题求助

Spring Boot MockMvc测试DELETE接口返回404,但Postman请求正常的排查方案

可能的原因及排查步骤

1. 检查Controller类级别的路径映射

你的测试请求URL是/fch-fiscal/usuarios/delete/{id},但仅在方法上标注了@DeleteMapping("/delete/{id}"),需确认Controller类上是否存在对应的类级路径映射:

@RestController
@RequestMapping("/fch-fiscal/usuarios") // 必须存在该前缀,否则测试URL会不匹配
public class UsuarioController {
    // ... 你的remove方法
}

如果类上没有这个@RequestMapping,测试请求的URL会多出来前缀导致404;而Postman能成功,说明你在Postman中使用的是正确的短路径(比如/delete/35),和测试用的URL不一致。

2. 检查测试类的配置是否正确

确保测试类正确加载Web MVC上下文并配置MockMvc:

  • 若仅测试Controller层,使用@WebMvcTest指定目标Controller:
@WebMvcTest(UsuarioController.class)
class UsuarioControllerTest {

    @Autowired
    private MockMvc mockMvc;

    // ... 你的测试方法
}
  • 若为全栈集成测试,使用@SpringBootTest配合@AutoConfigureMockMvc:
@SpringBootTest
@AutoConfigureMockMvc
class UsuarioControllerTest {

    @Autowired
    private MockMvc mockMvc;

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

若测试类未正确配置这些注解,MockMvc可能无法扫描到Controller映射,导致404。

3. 验证测试数据是否存在

Controller中如果service.findById(id)返回空,会返回404。Postman能成功说明其使用的环境中存在ID=35的用户,但测试环境(如内存数据库)中可能未初始化这条数据。

解决方法:在测试前初始化测试数据,比如用@BeforeEach构建测试数据:

@Autowired
private UsuarioService service;

@BeforeEach
void setUp() {
    Usuario usuario = new Usuario();
    usuario.setId(35L);
    // 设置其他必要字段
    service.save(usuario);
}

4. 启用日志查看请求映射详情

开启Spring MVC的DEBUG日志,查看所有已注册的请求映射,确认DELETE路径是否被正确识别:
在application-test.properties中添加:

logging.level.org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping=DEBUG

运行测试后,日志会输出所有映射路径,比如:

Mapped "{[/delete/{id}],methods=[DELETE]}" onto public org.springframework.http.ResponseEntity<java.lang.Object> mx.com.ficachi.master.login.controllers.UsuarioController.remove(java.lang.Long)

如果看不到你的DELETE路径,说明Controller未被扫描到,需检查测试类的组件扫描范围。

5. 检查URL拼写和大小写

确保测试中的URL路径和Controller映射完全一致,比如fch-fiscal、usuarios的大小写是否和类级映射匹配(Spring MVC默认大小写敏感,除非配置忽略)。

内容的提问来源于stack exchange,提问作者Axel Fernando Castro Jimenez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:12:49