css - 在 Spring Project 中提供静态内容方面,@RestController 与 @Controller 的区别是什么?
问题描述
经过数小时阅读不同的帖子、示例项目和许多不同的修复后,我解决了与在我的 Spring Boot 项目中提供静态内容相关的问题——特别是我从 html 页面中的 CSS 链接收到的错误。在以下链接(下面的摘录)中为我解决了这个问题的两个答案中不太受欢迎的一个。
检查使用注解的控制器类 - @RestController 或 @Controller。不要在一个类中混合使用 Rest API 和 MVC 行为。对于 MVC,使用 @Controller,对于 REST API,使用 @RestController
总之,在我尝试了一切(修改 application.properties 以显式设置静态目录路径,将 CSS 文件移动到许多不同的文件夹中,包括假定的标准集的文件夹)之后,找不到样式表。但是...将@RestController 换成@Controller 解决了以下代码。
@Controller
public class MVCController {
@Autowired
ThingdefstatsviewRepository defstatviewRepository;
@Autowired
ThingDefRecord thingDefRecord;
@GetMapping(path="/characterdef/{defid}")
public ModelAndView thymeLeafCharacterDefByID(@PathVariable String defid) {
Long id = Long.parseLong(defid);
thingDefRecord.loadAllStats(id);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("CharacterPage.html");
//Adds an attribute to the model as a name/value(object) pair
modelAndView.addObject("thingstats", thingDefRecord);
return modelAndView;
}
}
问题是,为什么?在 @RestController 类中使用 ModelAndView 对象会阻止我的 html 页面加载 CSS 文件是怎么回事?或者反过来,简单地使用@Controller 让它立即工作是什么?
显然,作为 Spring 的新手,我错过了一些关于这些不同的控制器如何与链接的静态内容一起工作的东西,但无法找出原因。
解决方案
如果你用 注释一个类@RestController
,你就是在告诉 Spring 你想要序列化一个对象并将它作为 JSON 或 XML(绝对不是 HTML 页面)返回。
@Controller
允许您选择返回 HTML 页面。(或者,如果您另外使用 注释// @RequestMapping
,@GetMapping
您可以序列化一个对象并将其作为 JSON 或 XML 返回。)@PostMapping
@ResponseBody
推荐阅读
- kubernetes - 如何添加防火墙规则以允许通过 kubernetes 中的虚拟 ip 访问节点端口
- vue.js - 为什么刷新页面后没有检测到Vuex?(努努特)
- python - 散列用于计算列缓存的 pandas 数据帧
- presto - 将客户端标签添加到 presto jdbc 连接
- c# - C#错误的值存储在变量中
- java - 通过 netbeans 中的类构造函数调用 initComponents() 有什么意义,尽管它也可以通过 main 方法调用?
- javascript - 如何组织表格内的 JSON 信息?
- python - yammer 是否通过 API 支持富文本格式
- algorithm - 从数组 (X1,X2,Y) 中找到三元组,使得 X1*X2=Y^2
- python - 当 locs 存在且数据存在时,df.iloc 返回空