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

Spring Boot无Controller时TestRestTemplate GET请求返回200而非404问题

Spring Boot测试请求始终返回200 OK的排查方案

问题重现

学习Spring Boot开发图书API时遇到异常现象:

  • 未编写任何RestController时,用TestRestTemplate请求/books/99,预期返回404 NOT FOUND,实际却返回200 OK;
  • 添加主动返回404的BookController后,测试结果仍显示返回200 OK。

相关代码

初始测试代码

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ApiApplicationTests {
    @Autowired
    TestRestTemplate restTemplate;

    @Test
    void returnsASingleBook() {
        ResponseEntity<String> response = restTemplate.getForEntity("/books/99", String.class);
        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
    }
}

修改后的测试代码(预期404)

@Test
void returnsASingleBook() {
    ResponseEntity<String> response = restTemplate.getForEntity("/books/99", String.class);
    assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}

自定义BookController

@RestController
public class BookController {

    @GetMapping("books/{requestedId}")
    public ResponseEntity<String> findById(@PathVariable Long requestedId){
        return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
    }
}

排查步骤

  • 打印响应内容确认实际返回:在测试中添加System.out.println("响应内容:" + response.getBody());,查看返回的是空白内容、白标签错误页还是其他自定义内容。如果是白标签错误页但状态码显示200,可能是配置修改了错误页的状态码。
  • 检查路径匹配一致性:将控制器的@GetMapping路径改为/books/{requestedId}(添加开头斜杠),再测试是否能匹配到请求路径。
  • 验证控制器是否被扫描加载:检查@SpringBootApplication主类的包路径是否包含BookController所在包。若路径不一致,需在主类添加@ComponentScan(basePackages = "你的控制器包路径")指定扫描范围。
  • 换用MockMvc测试:MockMvc直接调用Spring的DispatcherServlet,能规避TestRestTemplate的客户端层面干扰,更精准反映请求处理逻辑:
@SpringBootTest
@AutoConfigureMockMvc
class ApiApplicationTests {
    @Autowired
    MockMvc mockMvc;

    @Test
    void returnsASingleBook() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/books/99"))
               .andExpect(MockMvcResultMatchers.status().isNotFound());
    }
}
  • 排查过滤器/拦截器干扰:检查项目中是否存在自定义Filter或ClientHttpRequestInterceptor,这类组件可能会篡改响应的状态码。
  • 查看自动配置日志:启动测试时添加--debug参数,查看是否有自动配置的组件(如错误页处理器)修改了响应行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:05:22