Невозможно отобразить страницу thymleaf из контроллера Spring-Boot

#java #spring-boot #rest #user-interface #modelmapper

#java #spring-boot #rest #пользовательский интерфейс #modelmapper

Вопрос:

Проблема: я разработал rest API для весенней загрузки, который я могу вызвать из POSTMAN. Теперь я запрашиваю тот же метод REST API со страницы Thymleaf. Но он отображает только строку. Фактическая страница не загружается..

Это мой контроллер :

 @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";
}
}
  

Это моя страница Thymleaf :

 <!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
    xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<head>
<meta charset="UTF-8">
<title>Product List</title>
<link rel="stylesheet" type="text/css" th:href="@{/css/styles.css}">
</head>
<body>
    <th:block th:include="/_header"></th:block>
    <th:block th:include="/menu"></th:block>

    <div class="page-title">Product List</div>

    <div class="product-preview-container"
        th:each="prodInfo : ${products.list}">
        <ul>
            <li>Product Code:  <span th:utext="${prodInfo.productCode}"></span></li>
            <li>Product Name:  <span th:utext="${prodInfo.productName}"></span></li>
            <li>Product Price: <span th:utext="${#numbers.formatDecimal(prodInfo.productPrice,3,2,'COMMA')}"></span></li>
            <li><a th:href="@{|/buyProduct?code=${prodInfo.code}|}">Buy Now</a></li>
        </ul>
    </div>

    <br />
    <div class="page-navigator">
        <th:block th>
            <a th:href="@{|/productList|}"  class="nav-item"></a>
            <span class="nav-item" > ... </span>
        </th:block>
    </div>
    <th:block th:include="/_footer"></th:block>

</body>
</html>
  

Зависимость Maven для Thymleaf :

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  

Изображение структуры проекта :

введите описание изображения здесь

Вывод :

 Calling URL : http://localhost:1000/shopping/productList
It returns only the string `productList` in the page.
  

Пожалуйста, скажите мне, где я делаю неправильно. Я могу отобразить index.html страница. Но не эта страница.

ОБНОВЛЕНИЕ: я предоставил зависимость Maven, которую я использую, и аннотации, используемые в моем классе контроллера Rest.

Комментарии:

1. можете ли вы поделиться своим POM.xml или файл build.gradle?

Ответ №1:

Я полагаю, что вы либо

  • отсутствует spring-boot-starter-thymeleaf зависимость. Эта зависимость содержит необходимую зависимость и автоматическую настройку для распознавателя шаблонов thymeleaf (возвращаемая строка типа в имя шаблона html) и фактический рендеринг.
     <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
  
  • ИЛИ используя @Controller вместо @RestController в вашем классе контроллера. @RestController возвращает ответ json по умолчанию. Для рендеринга шаблона вы должны использовать @Controller .

Комментарии:

1. Я обновил свой вопрос, чтобы показать аннотации зависимостей и контроллеров, которые я использую. Что бы вы ни сказали, оно уже есть. Но он не работает. Также, чтобы добавить к этому, у меня есть отображение «/», которое отображает index страницу. И при вызове «/» он отображает страницу правильно. Но не эта /shoppingList страница.

Ответ №2:

Ответ :

Использование @Controller вместо @RestController решило проблему. Теперь можно отобразить HTML-страницу.