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

Spring中@Controller返回404但@RestController正常的原因排查

@RequestMapping("/api/test")
@Controller
public class TestController {

    @RequestMapping("/html")
    public String retHtml() {
        return "<html></html>";
    }
}

我编写了一个简易的TestController,使用@RestController注解时可正常访问接口,但切换为@Controller注解后返回HTTP 404状态码,请问造成该现象的可能原因有哪些?

可能的原因分析
  • 注解核心逻辑差异:@RestController是@Controller与@ResponseBody的组合注解。用@Controller时,方法返回的字符串默认会被当作视图名称,Spring会尝试查找对应名称的视图模板文件(比如JSP、Thymeleaf模板);而@RestController会直接把返回值作为响应体返回给客户端。你的代码返回<html></html>,Spring会去寻找同名视图文件,显然不存在,因此返回404。

  • 未添加@ResponseBody注解:如果想用@Controller直接返回字符串内容,必须在方法上添加@ResponseBody注解,否则Spring会按视图解析逻辑处理,找不到对应视图就返回404。

  • 缺少视图解析器配置:若你确实想返回视图,但项目中未配置合适的视图解析器(比如InternalResourceViewResolver),Spring无法定位视图文件位置,也会返回404。而@RestController不需要依赖视图解析器,所以不受影响。

  • 视图路径/名称不匹配:如果你的意图是返回某个HTML视图文件,但方法返回的字符串与实际视图文件的路径、名称不一致,比如实际视图在src/main/resources/templates/test.html,但你返回的是<html></html>,自然找不到对应视图资源,导致404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:56:07