带徒实训项目实战讲义分享:ApiFirst文档对比功能页面开发2

前一篇:带徒实训项目实战讲义分享:ApiFirst文档对比功能页面开发

亲爱的学员朋友们好,本小节跟小卷一起来学习用thymeleaf模板技术来渲染数据模型到表格中,通过本小节的学习,你会真正将thymeleaf模板技术应用到实处,做出有用的东西。

文章目录

    • 为什么选择thymeleaf
    • 准备工作
    • 编写数据模型表格模板
    • 渲染dto属性列表
    • 渲染字段校验
    • 思考:递归渲染可能出现的死循环如何避免?

为什么选择thymeleaf

有新加入进来的学员朋友,会问小卷为啥不用前后端分离的模式,用vue来开发前端页面呢。的确,vue开发页面会更简单,咱们这里选thymeleaf模板来做,是因为页面与后端没啥交互,只是查看的文档模式。而且用它还有个好处,thymeleaf除了可以直接生成浏览器可查看的html视图外,还可以结合模板解析引擎来生成导出html的文件,以方便用户直接本地浏览器打开来离线查看。

准备工作

首先看用户个人信息上报接口,请求内容类型为json数据,接下来就要基于一个DTO类型将结果渲染到一个表格中:
在这里插入图片描述
通过断点调试,我们可以定位到要渲染的对象:
在这里插入图片描述
要渲染的结构中包含了数据模型上的校验、数据模型继承的类型上的字段列表、数据模型本身的字段列表、字段上是数据模型的引用渲染、字段校验等等。还是有些复杂的:
在这里插入图片描述

编写数据模型表格模板

基于模板的判断逻辑,先加上对比后类型不发生变化的情况下的数据模型的渲染:
在这里插入图片描述
注意unless的用法,自动取反,让判断更加清晰。看到页面要渲染的部分出来了:
在这里插入图片描述
下面,咱们先简单实现下表格,这里要注意把DTO中需要解析的属性作为tr元素的集合放到一个单独的子模版的片段中,通过包含以及移除外层tr的方式进行引入,表格的头部在外面定义。当然为避免表头的tr多处重复定义,也可以把它放到被包含的片段中。
在这里插入图片描述
注意!!这里声明变量dto后面笔误,应该加${...}

渲染出来的内容符合我们的预期:
在这里插入图片描述

渲染dto属性列表

首先在DtoItemDTO中加一个方法来获取对比后合并的属性列表:
在这里插入图片描述

关于name的说明
模型里name这个字段注意是给后台生成DTO模型中的属性名使用的,而实际的对接文档中的名称,一般来说可以是驼峰命名也可以是下划线方式,甚至是@JsonProperty注解指定的别名。这里我们优先取定义的别名alias,再取name字段,而关于驼峰命名到下划线的转换规则这里在获取时处理下,在DtoPropertyDTO中提供一个方法:
写一个工具类:
在这里插入图片描述
测试ok:
在这里插入图片描述
DtoPropertyDTO中提供获取属性名的方法:
在这里插入图片描述
在模板中简单绑定下:
在这里插入图片描述
看页面效果:
在这里插入图片描述
对简单类型,看起来没啥问题,但咱们还要处理类型为dto的情况,看下面红框标出来的内容:
在这里插入图片描述
很显然,当我们判断到一个属性为dto引用时,需要在它的下一行递归渲染出其属性。
在这里插入图片描述
最终得到咱们要的效果:
在这里插入图片描述

渲染字段校验

参照之前入参列表的实现,注意调整下继承关系:
在这里插入图片描述
DtoPropertyDTO中原来定义的校验相关的属性都移除掉。

实现校验模板片段的复用:
在这里插入图片描述
页面马上呈现出复用的校验信息模板解析内容了,很棒!
在这里插入图片描述

关于分组校验
这里的分组校验可以优化,咱们可以对api文档做的更加的人性化,因为这里的数据模型在用户信息暂存tempSave和上报submit这两个接口中进行了复用,涉及到按不同的api来指定应用不同的分组,我们应该对要展示的相关的数据模型进行当前应用校验分组的过滤,让这块文档的展示更加智能,这是咱们后续要优化的点,先记录下。

思考:递归渲染可能出现的死循环如何避免?

这里对一个dto,在实际定义时会存在属性也是该dto类型的情况,比如一个StudentDTO下有一个girlFriend属性也是StudentDTO类型,这种情况下就要终止递归渲染的调用。这个问题先留给学员朋友们思考下怎么解决。后面咱们会出一个小节来说明这个问题怎么重现已经怎么解决,大家加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/436560.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt获取本机Mac地址、Ip地址

一、简述 今天给大家分享一个获取本机IP地址和Mac地址的方法,经过多次测试,台式机、笔记本等多个设备,暂时没有发现问题。 由于很多时候本地安装了虚拟机、蓝牙、无线网卡或者其他设备等,会有多个Mac地址,所以需要进…

汽车信息安全 -- 存到HSM中的密钥还需包裹吗?

目录 1.车规芯片的ROM_KEY 2.密钥加密与包裹 3.瑞萨RZ\T2M的密钥导入 4.小结 在车控类ECU中,我们通常把主控芯片MCU中的HSM以及HSM固件统一看做整个系统安全架构的信任根。 所以大家默认在HSM内部存储的数据等都是可信的,例如CycurHSM方案中使用HSM…

ControlGAN:Controllable Text-to-Image Generation

1 研究目的 当前的生成网络通常是不可控的,这意味着如果用户更改句子的某些单词,合成图像将与原始文本生成的合成图像显着不同;当给定的文本描述(例如颜色)发生变化时,鸟类的相应视觉属性被修改&#xff0c…

easyexcel常见问题分析

文章目录 一、读取数字多了很多小数位的精度问题 一、读取数字多了很多小数位的精度问题 浮点型转成BigDecimal的时候会出现精度问题,例如 这儿设置的实体类对象类型是String,默认用到的是StringNumberConverter转换器 2.1.4 版本 public class Strin…

【无人机设计与技术】四旋翼无人机的建模

摘要 本项目的目标是通过 Simulink 建模和仿真,研究四旋翼无人机的建模、姿态控制、定点位置控制及航点规划功能。无人机建模包含了动力单元模型、控制效率模型和刚体模型,并运用这些模型实现了姿态控制和位置控制。姿态控制为无人机的平稳飞行提供基础…

计算机视觉实战项目4(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

往期热门项目回顾: 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 AI健身教练-引体向上-俯卧撑计数…

在VMware虚拟机上部署polardb

免密登录到我们的虚拟机之后,要在虚拟机上部署polardb数据库,首先第一步要先克隆源码: 为了进SSH协议进行传输源码需要先进行下面的步骤: 将宿主机上的私钥文件复制到虚拟机上 scp "C:\Users\waitw\.ssh\id_rsa" ann…

ThinkPHP发送邮件教程:从配置到发送指南!

ThinkPHP发送邮件功能实现策略?Thinkphp如何发邮件? ThinkPHP作为一个流行的PHP框架,提供了强大的邮件发送功能,使得开发者可以轻松地在应用中集成邮件发送功能。AokSend将详细介绍如何在ThinkPHP中配置和发送邮件。 ThinkPHP发…

【Linux-基础IO】如何理解Linux下一切皆文件磁盘的介绍

目录 如何理解Linux系统上一切皆文件 1.物理角度认识磁盘 2.对磁盘的存储进行逻辑抽象 磁盘寻址 3.磁盘中的寄存器 如何理解Linux系统上一切皆文件 计算机中包含大量外设,操作系统想要管理好这些外设,就必须对这些外设进行先描述再组织&#xff0c…

【Linux 23】线程池

文章目录 🌈 一、线程池的概念🌈 二、线程池的应用场景🌈 三、线程池的实现 🌈 一、线程池的概念 线程池 (thread pool) 是一种利用池化技术的线程使用模式。 虽然创建线程的代价比创建进程的要小很多,但小并不意味着…

一篇文章快速学会docker容器技术

目录 一、Docker简介及部署方法 1.1Docker简介 1.1.1什么是docker 1.1.2 docker在企业中的应用场景 1.1.3 docker与虚拟化的对比 1.1.4 docker的优势 二 、部署docker 2.1 容器工作方法 2.2 部署第一个容器 2.2.1 配置软件仓库 2.2.2 安装docker-ce并启动服务 2.2.…

【AIGC】ChatGPT提示词解析:如何生成爆款标题、节日热点文案与完美文字排版

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯情绪化的吸睛爆款标题提示词使用方法 💯紧跟节日热点选题文案提示词使用方法 💯高效文字排版技巧提示词使用方法 💯小结 &#x1f4af…

数据结构-链表笔记

移除节点 203. 移除链表元素 - 力扣(LeetCode) /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListN…

Oracle数据库体系结构基础

关于Oracle体系结构 基于Oracle11g体系结构 目标: 了解Oracle体系结构掌握逻辑存储结构掌握物理存储结构熟悉Oracle服务器结构熟悉常用的数据字典 Oracle数据库管理中的重要的三个概念 实例(instance):实例是指一组Oracle后台进程以及在服务器中分配…

安宝特分享 | AR技术重塑工业:数字孪生与沉浸式培训的创新应用

在数字化转型的浪潮中,AR(增强现实)技术与工业的结合正在呈现新的趋势和应用延伸。特别是“数字孪生”概念的崛起,为AR技术在工业中提供了独特而创新的切入点。 本文将探索AR如何与数字孪生、沉浸式体验和实用案例相结合&#xf…

ResNet50V2:口腔癌分类

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 ResNet和ResNetV2对比 改进点:(a)original表示原始的ResNet的残差结构,(b)proposed表示新的ResNet的残差结构,主要差别就是(a)结构先卷积后进行BN和激活函数…

JAVAEE如何实现网页(jsp)间的数据传输?一文总结

刚刚接触到JAVAEE的WEB开发,解释不周的地方希望感谢指正!!! 情景如下: 我的使用是21版的IDEA,9.03版本的tomcat,来做一个示范。 构建项目 点击下一步 -> 完成,等待项目构建结束…

袋鼠云数据资产平台:数据模型标准化建表重构升级

数据模型是什么?简单来说,数据模型是用来组织和管理数据的一种方式。它为构建高效且可靠的信息系统提供了基础,不仅决定了如何存储和管理数据,还直接影响系统的性能和可扩展性。 想要建立一个良好的数据模型,设计时需…

Ubuntu开机进入紧急模式处理

文章目录 Ubuntu开机进入紧急模式处理一、问题描述二、解决办法参考 Ubuntu开机进入紧急模式处理 一、问题描述 Ubuntu开机不能够正常启动,自动进入紧急模式(You are in emergency mode)。具体如下所示: 二、解决办法 按CtrlD进…

在 Kali Linux 中安装 Impacket

步骤 1:更新系统 打开终端并确保你的系统是最新的: sudo apt update && sudo apt upgrade -y 步骤 2:安装依赖 在安装 Impacket 之前,你需要确保安装了 Python 和一些必要的依赖。通常,Kali 已经预装了 Pytho…