Spring Boot 自动控制器

来源:这里教程网 时间:2026-02-17 21:33:12 作者:

Spring Boot 自动化控制器展示了如何使用 ViewControllerRegistry 在 Spring Boot 应用中创建简单的自动化控制器。 我们的应用显示一个显示当前日期的简单页面。 我们使用 FreeMarker 作为模板引擎。

Spring 是流行的 Java 应用框架。 Spring Boot 致力于创建独立的,基于生产级别的基于 Spring 的应用,而无任何麻烦。

FreeMarker 是适用于 Web 和独立环境的服务器端 Java 模板引擎。 模板使用 FreeMarker 模板语言(FTL)编写,这是一种简单的专用语言。

ViewControllerRegistry

有时我们不需要复杂的控制器逻辑,而只想返回一个视图。 ViewControllerRegistry注册预先配置了状态代码和/或视图的简单自动化控制器。 它的addViewController()方法将视图控制器映射到给定的 URL 路径(或模式),以便使用预先配置的状态代码和视图来呈现响应。

pom.xmlsrc├───main│   ├───java│   │   └───com│   │       └───zetcode│   │           │   Application.java│   │           ├───config│   │           │       MvcConfig.java│   │           └───controller│   │                   MyController.java│   └───resources│       └───templates│               index.ftl└───test    └───java        └───com            └───zetcode                    HomePageTest.java

这是项目结构。 FreeMarker 模板文件的后缀为.ftl; 它们默认位于resources/templates目录中。 当 Spring Boot 在 Maven POM 文件中找到依赖关系时,它将自动配置 FreeMarker。 我们还包括一个测试文件。

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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.zetcode</groupId>    <artifactId>springbootautomatedcontroller</artifactId>    <version>1.0-SNAPSHOT</version>    <packaging>jar</packaging>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <maven.compiler.source>11</maven.compiler.source>        <maven.compiler.target>11</maven.compiler.target>    </properties>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.1.1.RELEASE</version>    </parent>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-freemarker</artifactId>        </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>

spring-boot-starter-freemarker是用于使用 FreeMarker 构建 Spring MVC 应用的启动器。 spring-boot-starter-test导入必要的测试模块。 该应用打包到一个 JAR 文件中。

com/zetcode/MvcConfig.java

package com.zetcode.config;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class MvcConfig implements WebMvcConfigurer {    @Override    public void addViewControllers(ViewControllerRegistry registry) {        registry.addViewController("/").setViewName("index");    }}

在MvcConfig类中,我们为主页配置一个视图和一个控制器。 由于我们在 Maven POM 文件中包含 FreeMarker,因此 Spring Boot 会自动将 FreeMarker 配置为模板引擎。 因此,index视图被映射到src/main/resources/templates目录中的index.ftl模板文件。

resources/templates/index.ftl

<#assign now = .now><!DOCTYPE html><html>    <head>        <title>Home page</title>        <meta charset="UTF-8">        <meta name="viewport" content="width=device-width, initial-scale=1.0">    </head>    <body>        <p>Today is: ${now?string.short}</p>    </body></html>

index.ftl模板文件是应用的主页。 它显示当前日期。

<#assign now = .now>

在这里,我们将当前日期时间值分配给now变量。

<p>Today is: ${now?string.short}</p>

我们以短格式打印日期。

com/zetcode/Application.java

package com.zetcode;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

我们设置了 Spring Boot 应用。 @SpringBootApplication注解启用自动配置和组件扫描。

com/zetcode/HomePageTest.java

package com.zetcode;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import org.springframework.web.context.WebApplicationContext;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;@RunWith(SpringRunner.class)@SpringBootTestpublic class HomePageTest {    @Autowired    private WebApplicationContext wac;    private MockMvc mockMvc;    @Before    public void setUp() {        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();    }    @Test    public void testHomePage() throws Exception {        this.mockMvc.perform(get("/"))                .andExpect(status().isOk())                .andExpect(view().name("index"))                .andDo(print());    }}

这是对主页的测试。

$ mvn spring-boot:run

我们启动该应用。

$ curl localhost:8080<!DOCTYPE html><html>    <head>        <title>Home page</title>        <meta charset="UTF-8">        <meta name="viewport" content="width=device-width, initial-scale=1.0">    </head>    <body>        <p>Today is: 5/21/19, 1:53 PM</p>    </body></html>

使用curl工具,我们可以检索主页。

在本教程中,我们创建了一个简单的控制器,并在 Spring Boot 中进行了查看,而没有创建特定的控制器类。 我们已经使用 FreeMarker 作为模板引擎。

相关推荐