Spring Boot中model.addAttribute无法正确显示消息的问题
问题解决方案
核心问题分析
你遇到的两个现象直接相关:
- 使用
@RestController时,Spring会把控制器方法的返回值直接作为HTTP响应体返回,所以返回字符串"message"时,页面就直接显示这个字符串,不会去查找对应的Thymeleaf模板文件。 - 使用
@Controller启动失败,大概率是因为项目缺少视图渲染相关依赖(比如Thymeleaf),导致Spring无法找到视图解析器。
步骤1:修正控制器注解
将@RestController替换为@Controller,这样Spring会把方法返回的字符串当作视图名称,去查找对应的模板文件:
package com.example.MySecondSpringBootProject.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.Controller; @Controller public class HomeController { @GetMapping("/") public String hello(){ return "hello"; } @GetMapping("/message") public String message(Model model) { model.addAttribute("message", "This is a custom message"); return "message"; } }
步骤2:确保添加Thymeleaf依赖
如果是Maven项目,在pom.xml中添加以下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
如果是Gradle项目,在build.gradle中添加:
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
添加依赖后,重新构建并启动项目。
验证结果
启动项目后访问localhost:8080/message,Thymeleaf模板会渲染message.html,并将model中的message值填充到页面的<h1>标签中,最终显示自定义消息。
额外说明
@RestController=@Controller+@ResponseBody,适合编写RESTful接口,返回JSON/XML等数据;@Controller适合编写MVC页面控制器,返回视图名称。- 你尝试的两种写法(添加
@RequestParam或额外参数)都是多余的,因为你不需要接收前端参数,只需要往Model中添加后端自定义数据即可。
内容的提问来源于stack exchange,提问作者epicUsername
相关产品推荐
相关产品推荐

