You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot页面无法展示Slot对象列表,求排查问题原因

问题分析与解决方案

你遇到的这个「只有表格表头、没有数据展示」的问题,核心原因大概率是控制器注解用错了,另外还有几个潜在排查点,我帮你一步步梳理:

1. 最关键的问题:@RestController 注解误用

你在AdminController上标注了@RestController,这个注解是@Controller + @ResponseBody的组合——它的作用是让方法返回的对象直接序列化为JSON/XML作为HTTP响应体,不会触发视图解析器去渲染Thymeleaf页面。

也就是说,你返回的ModelAndView并没有被用来渲染页面,而是被直接转成JSON返回了,页面自然拿不到slots数据。

解决方法:

把@RestController替换成@Controller:

@Controller // 替换原来的@RestController
public class AdminController {
    @GetMapping("/admin/slots")
    public ModelAndView getSlots() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("admin/slots");
        List<Slot> slots = .. get slots from other service ..
        modelAndView.addObject("slots", slots);
        // 可以加一行日志验证数据是否存在
        System.out.println("当前加载的Slots数量:" + slots.size());
        return modelAndView;
    }
}

2. 验证slots列表是否真的有数据

有时候服务调用看似成功,但实际返回的是空列表,这也会导致表格无数据。建议在控制器里打印列表长度,确认是否有数据被传递到视图层。

3. 检查Thymeleaf视图文件的位置

Spring Boot默认的Thymeleaf视图存放路径是src/main/resources/templates/,所以你的slots.html必须放在src/main/resources/templates/admin/slots.html,确保路径和modelAndView.setViewName("admin/slots")完全对应。

4. 优化Thymeleaf表达式写法(非必须,但更规范)

Thymeleaf支持直接通过属性名访问对象字段(它会自动调用对应的getter方法),你可以把视图里的${slot.getId()}改成更简洁的${slot.id},其他字段同理:

<tr th:each="slot : ${slots}">
    <td th:text="${slot.id}"></td>
    <td th:text="${slot.startTime}"></td>
    <td th:text="${slot.finishTime}"></td>
    <td th:text="${slot.title}"></td>
    <td th:text="${slot.description}"></td>
</tr>

优先尝试替换控制器注解,这应该是解决问题的核心;如果还是不行,再依次排查后面的几点。

内容的提问来源于stack exchange,提问作者user468587

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:40:19