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

Spring控制器为何返回字符串而非视图?@RestController引发的问题

问题原因及解决方案

你的问题核心出在控制器类的注解使用错误:

你给控制器标注了@RestController,这个注解的作用是让控制器中所有方法的返回值直接以JSON/字符串形式作为HTTP响应体返回,相当于给每个方法默认加上了@ResponseBody注解。而你需要的是返回视图名称,让Spring MVC的视图解析器(此处为Thymeleaf)去渲染templates目录下的showProducts.html页面,@RestController完全不具备视图渲染的能力。

解决方案

直接把控制器类上的@RestController替换成@Controller即可。修改后控制器示例如下:

@Controller // 替换原有的@RestController
public class ProductController {

    @GetMapping("/showProducts")
    public String returnAllProductsInATable(Model model) {
        model.addAttribute("products", listProducts); // 注意补充原代码缺失的分号
        return "showProducts"; // 补充原代码缺失的分号
    }
}

补充说明

如果你的控制器需要同时提供REST接口(返回JSON)和视图渲染能力,可以混合使用注解:

  • 保持类上的@Controller注解,给需要返回JSON的方法单独添加@ResponseBody
  • 或者拆分控制器,一个用@Controller处理视图,一个用@RestController处理REST请求

另外注意原控制器代码里的语法问题:model.addAttribute("products", listProducts)和return "showProducts"末尾都缺少分号,会导致编译错误,记得补上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:15:52