Класс контроллера не может найти шаблон HTML - PullRequest
0 голосов
/ 10 февраля 2019

Мой каталог

Я пытаюсь создать приложение весенней загрузки для школы, которое выводит книги на html-страницу из базы данных с контроллером.

Лично я думаю, что проблема в том, что контроллер по какой-то причине не может найти шаблон.Потому что, когда я перехожу к нужному шаблону через Chrome, он просто показывает «список книг» на странице, ничего больше.

Я попытался создать совершенно новый проект и скопировать код из других моих файлов в новые файлы.без результатов.

Мой класс контроллера:

@Controller
@ResponseBody
public class BookController {
@Autowired
BookRepository bookRepository;

@RequestMapping(value = "/books", method = RequestMethod.GET)
public String getBooks(Model model) {
    List<Book> books =  (List<Book>) bookRepository.findAll();
    model.addAttribute("books", books);
    return "booklist";
}

Мой HTML-шаблон:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Book List</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Books</h1>
<table>
    <tr>
        <th>Id</th>
        <th>Title</th>
        <th>Year</th>
        <th>Isbn</th>
        <th>Price</th>
    </tr>

    <tr th:each="book : ${books}">
        <td th:text="${book.id}">id</td>
        <td th:text="${book.title}">title</td>
        <td th:text="${book.year}">year</td>
        <td th:text="${book.isbn}">isbn</td>
        <td th:text="${book.price}">price</td>

    </tr>
</table>
</body>
</html>

Файл pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>hh.swd20</groupId>
<artifactId>Bookstore</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Bookstore</name>
<description>Demo project for Spring Boot</description>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

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

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

</project>

файл application.properties:

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.jpa.show-sql=true

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Вы можете попробовать это.

Hit: localhost: // yourportnumber / api / books

//@Controller
  @RestController
//@ResponseBody
  @RequestMapping("/api")
  public class BookController {
  @Autowired
  BookRepository bookRepository;

  @GetMapping(value = "/books", method = RequestMethod.GET)
  public ModelAndView getBooks(Model model) {
  List<Book> books =  (List<Book>) bookRepository.findAll();
  model.addAttribute("books", books);
  ModelAndView mav = new ModelAndView("booklist");
  return mav;

}
0 голосов
/ 10 февраля 2019

Удалите аннотацию @ ResponseBody из класса вашего контроллера, потому что:

Аннотация @ResponseBody сообщает контроллеру, что возвращаемый объект автоматически сериализуется в JSON и передается обратно вобъект HttpResponse.

Затем возвращенная строка booklist будет использоваться Spring-MVC для разрешения именованного файла шаблона HTML.

Файл шаблона (например, booklist.html)будет искать по умолчанию в каталоге шаблонов по умолчанию is src/main/resources/templates.

В противном случае убедитесь, что правильно сконфигурировал ViewResolver .

Для Thymeleaf вам необходимо добавить зависимость к вашему Maven POM:

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

См. Также этот учебник Spring-Boot & Thymeleaf

...