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

Spring Boot控制器无法渲染Thymeleaf页面,仅返回字符串求助

解决Spring Boot中Thymeleaf页面无法渲染仅返回视图名称的问题

嘿,我一眼就看到几个关键问题导致你的页面只返回字符串productList而不渲染,咱们一个个来解决:

1. 控制器注解用错了:@RestController vs @Controller

你当前用的@RestController是@Controller和@ResponseBody的组合注解,它的作用是把方法的返回值直接作为HTTP响应体返回(这也是Postman能正常调用API的原因),但这会跳过Spring的视图解析流程,自然不会去加载Thymeleaf页面。

要渲染Thymeleaf视图,你需要把控制器的注解改成@Controller:

@Controller  // 替换原来的@RestController
@RefreshScope
@RequestMapping("/shopping")
public class ShoppingController {
    @RequestMapping(value="/productList")
    public String listAllProducts(ModelMap model){
        logger.info("ShoppingMS : listAllProducts()");
        ResponseEntity<List<Product>> responseProductList = prodServ.listAllProducts();
        List<Product> products = responseProductList.getBody();
        if(products.isEmpty()) {
            logger.info("No Products Found");
        }
        logger.info("No of products fetched : " +products.size());
        model.addAttribute("products", products);
        return "productList";  // 这里返回的是视图名称,会被视图解析器处理
    }
}

2. 视图名称与页面文件名不匹配

你的控制器返回的视图名称是productList,但你的Thymeleaf页面文件名叫productsList.html(多了一个's')。Spring Boot默认的Thymeleaf视图解析规则是:

前缀:classpath:/templates/
后缀:.html

所以返回productList会去找classpath:/templates/productList.html,但你的文件是productsList.html,两者不匹配。解决方法二选一:

  • 把控制器的返回值改成return "productsList";
  • 把页面文件名改成productList.html

3. Thymeleaf模板中的遍历变量错误

你在页面里写的遍历表达式是:

<div class="product-preview-container" th:each="prodInfo : ${products.list}">

但控制器中model.addAttribute("products", products)里的products已经是List<Product>对象了,直接遍历${products}即可,不需要加.list(List本身没有这个属性)。修改后的遍历代码:

<div class="product-preview-container" th:each="prodInfo : ${products}">

另外,你页面里的<a th:href="@{|/buyProduct?code=${prodInfo.code}|}">也要注意,从控制器的实体属性来看,prodInfo的属性是productCode,所以应该改成${prodInfo.productCode},不然会找不到属性报错。

做完以上修改后,再访问http://localhost:1000/shopping/productList,就能正常渲染Thymeleaf页面了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:22:40