显示文本“索引”而不是我的 index.html 文件的内容
Posted
技术标签:
【中文标题】显示文本“索引”而不是我的 index.html 文件的内容【英文标题】:The text "index" is getting displayed instead of the contents of my index.html file 【发布时间】:2022-01-14 22:10:28 【问题描述】:我的 RestController 中有这个方法:
@GetMapping("/")
public Mono<String> index(Model model)
model.addAttribute("images", imageService.findAllImages());
return Mono.just("index");
当我运行我的应用程序时,我得到一个页面,除了左上角的文本 index
之外什么都没有。如果我将return Mono.just("index");
更新为return Mono.just("foo");
,那么foo
会显示在左上角。
我预计文件resources/templates/index.html
会显示在浏览器中。我该如何解决这个问题?
【问题讨论】:
是用Controller
还是RestController
注解?请使用Controller
注释尝试一次。
【参考方案1】:
就像 Paras 提到的,主要问题可能是控制器类顶部的注释不正确。
@RestController
和 @Controller
在模板处理方面表现不同。
@RestController
基本上只返回您的对象(在本例中是由Mono.just(...)
生成的对象),该对象通常被转换为 JSON 或纯文本(取决于设置)。
@Controller
注解通常意味着控制器方法的返回应该被视为从模板根到HTML
模板的路径。在这种情况下,您实际上并不需要 Mono.just()
构造(iirc 为响应式开发创建通量) - 只需像这样返回 String
:
@Controller
public class MyController
private ImageService imageService;
@RequestMapping( "/" ) // could also be @GetMapping( "/" )
public String index( Model model )
model.addAttribute("images", imageService.findAllImages());
return "index";
@Autowired
public void setImageService( ImageService imageService )
this.imageService = imageService;
另外,我真的不明白您究竟为什么尝试使用 Rest Controller 来显示页面。如果您想异步加载页面内容,您可以定义一个简单的控制器并将指定的 URL 调用为 ajax get
。但请注意,在这种方法中,您将再次在页面内获得一个完整的页面(带有<html>
、<head>
等)。为防止将您的内容包装在您的 index.html
中,如下所示:
<!-- head, meta etc -->
<body>
<th:block th:fragment="content">
<!-- page content goes here -->
</th:block>
</body>
并在控制器中的 index( Model model )
方法中将返回字符串更改为 "index :: content"
。
如果这没有帮助,请提供您的百里香豆定义。
【讨论】:
以上是关于显示文本“索引”而不是我的 index.html 文件的内容的主要内容,如果未能解决你的问题,请参考以下文章
Node/Express:数据库打印在屏幕上而不是 index.html
在 QStyledItemDelegate 中显示 QComboBox 文本而不是索引值