目前,我正在做一个小项目,需要使用Spring Boot和FreeMarker模板引擎。我尝试了不同的方法,但仍然无法从 Spring Boot 返回 FreeMarker 视图。我的项目使用 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 视图,相反,当我向此 URL 发送 GET 请求时,我只会显示“
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
文件夹下。
这是我的项目结构:
任何帮助将不胜感激,谢谢。
我已经想通了,我的类是用
@RestController
注解来注解的,它本身就是 @Controller
和 @ResponseBody
注解的组合,因为我类中的每个方法都会返回一个响应体,即使是那个我在这里发布的,这就是它返回正文的原因,因此返回index
。我需要将我的 @RestController
更改为 @Controller
,问题就解决了。
对我来说,下面的conf丢失了
spring.freemarker.template-loader-path=classpath:/templates/ spring.freemarker.suffix=.ftlh