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
相关产品推荐
相关产品推荐

