为什么这个 Model 东西在 @Controller 上工作但在 @RestController 上不起作用
当我尝试时
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@Controller
public class ArticleController {
@GetMapping("/articles")
public String getArticles(Model model) {
List<Article> articles = articleService.findAllArticles();
model.addAttribute("articles", articles);
return "articleList";
}
@GetMapping("/article/{id}")
public String getArticleById(@PathVariable Long id, Model model) {
Article article = articleService.findArticleById(id);
model.addAttribute("article", article);
return "articleDetail";
}
}
它可以工作,但与 @RestController 而不是 @Controller 的代码完全相同 不工作
主要区别以及它不起作用的原因是每个控制器返回的内容。 @RestController 在大多数情况下返回 JSON,而在另一方面 @Controller 返回一个表示视图名称的字符串,该视图名称可以是 HTML、JSP 等。 @Controller:用于定义处理 Web 请求并返回视图名称的控制器。视图名称由视图解析器解析,例如 JSP 页面或 Thymeleaf 模板。在本例中,模型对象用于将数据传递到视图层,视图层通常是 HTML 页面。
@RestController:这是一个结合了@Controller和@ResponseBody的便捷注解。它用于创建 RESTful Web 服务。当您使用@RestController时,Spring会将返回的对象直接转换为JSON或XML响应。这意味着没有发生视图解析,因此模型对象在此上下文中不适用。