0

0

Spring Boot中将后端数据特定字段映射到HTML页面教程

碧海醫心

碧海醫心

发布时间:2025-09-27 10:00:21

|

669人浏览过

|

来源于php中文网

原创

Spring Boot中将后端数据特定字段映射到HTML页面教程

本教程详细阐述了如何在Spring Boot应用中,利用Thymeleaf模板引擎将后端服务获取的数据,仅提取并展示其特定字段(如标题和描述)到前端HTML页面。通过重构控制器方法并设计相应的HTML模板,实现数据与视图的有效分离与定制化渲染,同时辨析了@JsonIgnore注解的适用场景。

问题背景与核心需求

在spring boot开发中,我们经常会遇到需要从后端服务获取数据,并将其呈现在web页面上的场景。原始问题中,开发者有一个spring boot控制器,其 @getmapping("/getrandomsummercamps") 方法返回一个 list 对象,默认情况下会被spring boot自动序列化为json格式的api响应。例如:

[{"title":"Raquette Lake Camp","description":"...","typeOfAdventureHolidays":"summerCamps"}]

然而,开发者的核心需求是:当调用此控制器时,不返回JSON数据,而是直接返回一个HTML页面,并且该页面只显示 AdventureHolidays 对象中的 title 和 description 字段。

原始问题中提供了一个解决方案建议:在 typeOfAdventureHolidays 字段上添加 @JsonIgnore 注解。这个注解的作用是告诉Jackson(Spring Boot默认的JSON序列化库)在将对象序列化为JSON时忽略该字段。虽然这可以控制JSON输出的内容,但它并不能解决将数据渲染成HTML页面的根本需求。@JsonIgnore 适用于控制JSON API的输出,而不是生成HTML视图。

为了实现将特定字段映射到HTML页面,我们需要转向Spring Boot的视图层技术,例如Thymeleaf。

解决方案核心:Spring Boot视图层渲染

要将后端数据渲染到HTML页面,并只显示特定字段,我们需要以下几个步骤:

立即学习前端免费学习笔记(深入)”;

  1. 引入模板引擎依赖:Spring Boot支持多种模板引擎,Thymeleaf是其中非常流行且与Spring生态集成良好的一个。
  2. 重构Controller方法:修改控制器方法的返回类型,使其返回视图的名称,并通过 Model 对象将数据传递给视图。
  3. 设计HTML视图模板:创建一个HTML文件,利用模板引擎的语法来迭代数据并显示所需字段。

1. 引入Thymeleaf模板引擎依赖

首先,确保你的Spring Boot项目中包含了Thymeleaf的依赖。如果你使用的是Maven,可以在 pom.xml 中添加如下配置:


    org.springframework.boot
    spring-boot-starter-thymeleaf

如果是Gradle,则在 build.gradle 中添加:

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

2. 重构Controller方法

接下来,我们需要修改 AdventureHolidays 模型的Controller方法。不再返回 List,而是返回一个表示HTML视图名称的 String。同时,通过注入 org.springframework.ui.Model 对象,将后端获取的数据传递给前端视图。

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;

@Controller // 注意这里改为 @Controller,而不是 @RestController,因为我们要返回视图
public class AdventureHolidaysController {

    private final AdventureHolidaysService adventureHolidaysService;

    public AdventureHolidaysController(AdventureHolidaysService adventureHolidaysService) {
        this.adventureHolidaysService = adventureHolidaysService;
    }

    @GetMapping("/summerCampsHtml") // 更改URL以区分API和HTML页面
    public String getSummerCampsHtml(Model model) {
        // 从服务层获取数据
        List summerCamps = adventureHolidaysService.getRandomSummerCamps();

        // 将数据添加到Model中,以便在HTML模板中访问
        // "camps" 是在HTML模板中引用这个列表的名称
        model.addAttribute("camps", summerCamps);

        // 返回视图名称。Spring Boot会查找 src/main/resources/templates/summerCamps.html
        return "summerCamps"; 
    }
}

说明:

GitHub Copilot
GitHub Copilot

GitHub AI编程工具,实时编程建议

下载
  • 我们将 @RestController 改为 @Controller。@RestController 默认会将返回值序列化为JSON/XML,而 @Controller 则通常用于返回视图名称。
  • 方法名和URL路径可以根据实际需求调整,这里为了清晰起见,改为了 /summerCampsHtml。
  • Model model 参数允许我们将数据绑定到视图。
  • model.addAttribute("camps", summerCamps); 将 summerCamps 列表以 camps 为键名添加到模型中。
  • return "summerCamps"; 指示Spring Boot使用名为 summerCamps 的模板来渲染响应。默认情况下,Spring Boot会在 src/main/resources/templates/ 目录下查找 summerCamps.html 文件。

3. 设计HTML视图模板 (Thymeleaf)

在 src/main/resources/templates/ 目录下创建一个名为 summerCamps.html 的文件。在这个文件中,我们将使用Thymeleaf的语法来遍历 camps 列表,并只显示 title 和 description 字段。




    
    
    Summer Camps
    


    

Our Amazing Summer Camps

No summer camps available at the moment.

Camp Title Placeholder

Camp Description Placeholder

说明:

  • xmlns:th="http://www.thymeleaf.org" 声明了Thymeleaf命名空间,允许我们使用 th: 前缀的属性。
  • 用于条件渲染,判断 camps 列表是否为空。
  • 是Thymeleaf的迭代语法,它会遍历 camps 列表中的每一个 AdventureHolidays 对象,并将其命名为 camp。
  • 使用 th:text 属性将 camp 对象的 title 属性值插入到

    标签的文本内容中。同样地,th:text="${camp.description}" 用于显示描述。

  • 现在,当访问 /summerCampsHtml 这个URL时,Spring Boot会执行控制器方法,获取数据,然后使用 summerCamps.html 模板渲染一个只包含标题和描述的HTML页面。

    进阶考量与最佳实践

    1. 数据投影(DTO)

    在某些情况下,如果 AdventureHolidays 对象包含大量字段,而你只希望在视图中显示少数几个,那么创建一个专门的数据传输对象(DTO)来承载这些特定字段会是更好的实践。

    // AdventureCampDto.java
    public class AdventureCampDto {
        private String title;
        private String description;
    
        // 构造函数、Getter和Setter
        public AdventureCampDto(String title, String description) {
            this.title = title;
            this.description = description;
        }
    
        public String getTitle() { return title; }
        public void setTitle(String title) { this.title = title; }
        public String getDescription() { return description; }
        public void setDescription(String description) { this.description = description; }
    }

    然后在服务层或控制器中将 AdventureHolidays 对象转换为 AdventureCampDto 列表:

    // Controller
    @GetMapping("/summerCampsHtml")
    public String getSummerCampsHtml(Model model) {
        List summerHolidays = adventureHolidaysService.getRandomSummerCamps();
        List summerCampsDto = summerHolidays.stream()
                .map(camp -> new AdventureCampDto(camp.getTitle(), camp.getDescription()))
                .collect(Collectors.toList());
    
        model.addAttribute("camps", summerCampsDto);
        return "summerCamps";
    }

    使用DTO的好处是:

    • 分离关注点:视图层只关心它需要的数据,不了解原始领域模型的全部细节。
    • 减少数据传输:如果原始对象很大,DTO可以只传输必要的字段,提高效率。
    • 安全性:避免不小心将敏感信息暴露给视图。

    2. RESTful API与MVC视图分离

    在现代Web应用架构中,通常会区分RESTful API端点(返回JSON/XML数据)和MVC视图渲染端点(返回HTML页面)。

    • RESTful API:例如 GET /api/v1/summerCamps,使用 @RestController 注解,返回 List,供前端JavaScript框架或移动应用消费。
    • MVC视图:例如 GET /summerCampsHtml,使用 @Controller 注解,返回视图名称,供浏览器直接访问。

    这种分离有助于保持代码的清晰和职责的单一。

    3. @JsonIgnore 的正确使用场景

    正如前文所述,@JsonIgnore 注解主要用于控制JSON或XML序列化。它的作用是在将Java对象转换为JSON字符串时,忽略带有该注解的字段。

    例如,如果你有一个 AdventureHolidays 对象的RESTful API,但你不想在JSON响应中包含 typeOfAdventureHolidays 字段,你可以在模型类中这样使用它:

    import com.fasterxml.jackson.annotation.JsonIgnore;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @Document("adventureholidays")
    public class AdventureHolidays {
    
        @Id
        private String id;
        private String title;
        private String description;
    
        @JsonIgnore // 在JSON序列化时忽略此字段
        private String typeOfAdventureHolidays;
    
        // Getter和Setter
        // ...
    }

    这样,当你的 @RestController 方法返回 List 时,生成的JSON将不再包含 typeOfAdventureHolidays 字段。这与本教程中将数据渲染到HTML页面的目标是不同的,但理解其作用有助于在不同场景下选择合适的工具

    总结

    通过本教程,我们学习了如何在Spring Boot应用中,利用Thymeleaf模板引擎实现将后端数据特定字段映射到HTML页面的功能。核心步骤包括:引入Thymeleaf依赖、将控制器方法从返回JSON数据改为返回视图名称并使用 Model 传递数据,以及创建HTML模板利用Thymeleaf语法渲染所需字段。同时,我们也探讨了使用DTO进行数据投影的优势,并明确了 @JsonIgnore 注解在JSON序列化控制中的正确应用场景,帮助开发者更灵活地处理数据展示和API设计。

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

112

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

26

2026.01.26

spring boot框架优点
spring boot框架优点

spring boot框架的优点有简化配置、快速开发、内嵌服务器、微服务支持、自动化测试和生态系统支持。本专题为大家提供spring boot相关的文章、下载、课程内容,供大家免费下载体验。

135

2023.09.05

spring框架有哪些
spring框架有哪些

spring框架有Spring Core、Spring MVC、Spring Data、Spring Security、Spring AOP和Spring Boot。详细介绍:1、Spring Core,通过将对象的创建和依赖关系的管理交给容器来实现,从而降低了组件之间的耦合度;2、Spring MVC,提供基于模型-视图-控制器的架构,用于开发灵活和可扩展的Web应用程序等。

390

2023.10.12

Java Spring Boot开发
Java Spring Boot开发

本专题围绕 Java 主流开发框架 Spring Boot 展开,系统讲解依赖注入、配置管理、数据访问、RESTful API、微服务架构与安全认证等核心知识,并通过电商平台、博客系统与企业管理系统等项目实战,帮助学员掌握使用 Spring Boot 快速开发高效、稳定的企业级应用。

70

2025.08.19

Java Spring Boot 4更新教程_Java Spring Boot 4有哪些新特性
Java Spring Boot 4更新教程_Java Spring Boot 4有哪些新特性

Spring Boot 是一个基于 Spring 框架的 Java 开发框架,它通过 约定优于配置的原则,大幅简化了 Spring 应用的初始搭建、配置和开发过程,让开发者可以快速构建独立的、生产级别的 Spring 应用,无需繁琐的样板配置,通常集成嵌入式服务器(如 Tomcat),提供“开箱即用”的体验,是构建微服务和 Web 应用的流行工具。

34

2025.12.22

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

135

2025.12.24

PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

154

2025.11.26

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

最新文章

更多
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号