Невозможно вернуть представление Freemarker из метода Spring Boot

#java #spring-boot #freemarker

#java #spring-boot #freemarker

Вопрос:

В настоящее время я делаю небольшой проект, в котором мне нужно использовать Spring Boot и механизм шаблонов FreeMarker. Я пробовал разные способы, но я все еще не могу вернуть представление FreeMarker из Spring Boot. Мой проект использует Gradle в качестве инструмента сборки, вот что внутри:

build.gradle:

 plugins {
    id 'org.springframework.boot' version '2.3.3.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

sourceCompatibility = 11

repositories {
    mavenCentral()
}

sourceSets.main.resources.srcDirs = ["src/resources"]

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    compile("org.springframework.boot:spring-boot-starter-web")
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'org.springframework.boot:spring-boot-starter-freemarker'

}
 

Вот мой метод, который я ожидаю перенаправить на представление FreeMarker со списком, вместо этого, когда я отправляю запрос GET на этот URL, я просто получаю index отображаемую строку «»:

 @GetMapping(path = "/code/latest")
public String getTop10LatestCode(@ModelAttribute("model") ModelMap model) {
    model.addAttribute("codes", codes.subList(Math.max(0, codes.size() - 10), Math.max(codes.size() - 1, 0)));
    return "index";
}
 

Вот мой application.properties файл:

 server.port=8889
management.endpoints.web.exposure.include=*
management.endpoint.shutdown.enabled=true

spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.suffix=.ftlh
 

Мое представление FreeMarker уже находится в templates папке внутри resources папки.

Вот моя структура проекта: введите описание изображения здесь

Любая помощь будет высоко оценена, спасибо.

Ответ №1:

Я понял это, мой класс аннотируется @RestController аннотацией, которая сама по себе является комбинацией @Controller @ResponseBody аннотаций и , потому что каждый метод в моем классе будет возвращать тело ответа, даже тот, который я разместил здесь, вот почему он возвращает тело, следовательно, возвращает index . Мне нужно изменить свой @RestController на @Controller , и проблема решена.