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

news2024/10/1 21:58:01

前一篇:带徒实训项目实战讲义分享: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.coloradmin.cn/o/2183231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript 全攻略:从基础到精通

一、JavaScript 初印象 (一)起源与发展 JavaScript 的诞生源于对网页动态性的需求。1995 年,布兰登・艾奇仅用十天时间就设计出了这门语言,最初命名为 Mocha,后改为 LiveScript,最终定名为 JavaScript。它…

OLED显示屏中常见的3-spi和4-spi

显示屏中经常出现的IIC,3-spi和4-spi 其中,在用spi接口中经常用到的是4-spi,和IIC相比,spi有更高的传输速度。而IIC需要更少的引脚。下面是以SH1107驱动手册里的内容简单了解3-spi和4-spi区别 从两张图中可以看出,3…

Vue2(十三):路由

一、路由的简介 vue-rooter:是vue的一个插件库,专门用来实现SPA应用 1.对SPA应用的理解 1、单页 Web 应用(single page web application,SPA)。 2、整个应用只有一个完整的页面 index.html。 3、点击页面中的导航链…

Hutool工具包

下载jar包网址 hutool-all-5.3.2.jar下载及Maven、Gradle引入代码&#xff0c;pom文件及包内class -时代Java (nowjava.com) maven导入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.2&l…

PHP后台+基于微信小程序外卖点餐系统毕业设计源代码作品和开题报告

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

Ansible学习之ansible-pull命令

想要知道ansible-pull是用来做什么的&#xff0c;就需要了解Ansible的工作模&#xff0c;Ansible的工作模式有两种&#xff1a; push模式 push推送&#xff0c;这是Ansible的默认模式&#xff0c;在主控机上编排好playbook文件&#xff0c;push到远程主机上来执行。pull模式 p…

一文搞懂CP-ABE,基于访问控制树的BSW方案原理分析与源码实现【基于C++、PBC库】

文章目录 一. 概述1.1 CP-ABE基础介绍1.2 访问控制树与BSW方案原理1.2.1 系统模型与角色1.2.2 主要算法1.2.3 访问结构与访问树1.2.4 数学基础 二. 具体算法流程2.1 Setup&#xff08;初始化&#xff09;2.2 KeyGen&#xff08;密钥生成&#xff09;2.3 Encrypt&#xff08;加密…

Typora---进度条(1)

本系列专门介绍关于typora中用到的小玩意。&#xff08;哈哈哈哈哈哈&#xff09; 本帖子讲述关于 进度条 的事情。 在typora中通过下面的语句可以显示出一个进度条&#xff1a; ![95% done](https://markdone.org/progress//95.png)通过更改上面语句中的数字可以展示不同的进…

local minima 的问题如何解决

&#x1f680; 在初始神经网络那一节&#xff08;链接如下&#xff1a;初识机器学习&#xff09;是遇到了两个问题&#xff0c;第一个是在求解函数未知参数数时会遇到local minima的问题&#xff0c;在哪里我们并没有过多解释&#xff0c;就是说一般遇不到并且很好解决&#xf…

合并两个有序数组(c语言)

1.//给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 //注意&#xff1a;最终&#xff0c;合并后数…

Unity 2D RPG Kit 学习笔记

学习资料&#xff1a; B站教学视频&#xff1a;https://www.bilibili.com/video/BV1dC4y1o7A5?p1&vd_source707ec8983cc32e6e065d5496a7f79ee6 2D RPG Kit Documentation.pdf文档 1、2D RPG Kit Documentation文档 1.1、Scenes/TitleScreen 开始菜单工程 1.2、https://it…

32、Qt读写csv文件

一、写入 QString fileName QFileDialog::getSaveFileName(this, "写入", "/untitled.csv", tr("Files (*.csv)"));if(fileName.isEmpty()){QMessageBox::warning(this, "提示", "文件名不能为空", QMessageBox::Ok);retur…

探索分布式IO模块的介质冗余:赋能工业自动化的稳健之心

在日新月异的工业自动化领域&#xff0c;每一个细微环节的稳定性都直接关系到生产线的效率与安全。随着智能制造的深入发展&#xff0c;分布式IO&#xff08;Input/Output&#xff09;模块作为连接现场设备与控制系统的关键桥梁&#xff0c;其重要性日益凸显。我们自主研发的带…

网络原理-传输层UDP

上集回顾&#xff1a; 上一篇博客中讲述了应用层如何自定义协议&#xff1a;确定传输信息&#xff0c;确定数据格式 应用层也有一些现成的协议&#xff1a;HTTP协议 这一篇博客中来讲述传输层协议 传输层 socket api都是传输层协议提供的&#xff08;操作系统内核实现的了…

MBTI人格测试项目(uni-app微信小程序 + SpringBoot)

目录 项目概述 测试 & 计分方式说明 页面展示 开发日志文档 素材&#xff1a;题库和人格分析 Gitee源码地址 项目概述 1.通过回答70道不同类型的题目&#xff0c;推算出MBTI人格类型&#xff0c;并给出此人格类型的解析。 2.使用uni-app编写微信小程序。 3.前端使…

车辆重识别(2021ICML改进的去噪扩散概率模型)论文阅读2024/9/29

所谓改进的去噪扩散概率模型主要改进在哪些方面&#xff1a; ①对数似然值的改进 通过对噪声的那个方差和T进行调参&#xff0c;来实现改进。 ②学习 这个参数也就是后验概率的方差。通过数据分析&#xff0c;发现在T非常大的情况下对样本质量几乎没有影响&#xff0c;也就是说…

Keil安装简易教程

1、安装MDK538a.exe 2、一直点下一步&#xff0c;默认安装即可。安装完成依次点击进行注册 3、利用Keygen进行License注册 4、Pack Installer 下载包&#xff0c;可在线下&#xff0c;可自行下 5、下载完可正常打开自己的工程项目 6、解压文件到Keil安装路径下C:\Keil_MDK\ARM…

如何利用多线程提高计算密集型任务的性能

文章目录 摘要引言基本概念和原理判断是否适合使用多线程多线程编程中的关键问题设计和实现高效的多线程示例代码QA环节总结未来展望参考资料 摘要 多线程编程可以充分利用多核处理器的计算能力&#xff0c;从而显著提高计算密集型任务的性能。本篇文章将介绍多线程编程的基本…

基于STM32的智能照明系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 光照传感器数据采集照明控制实现自动亮度调节与手动控制应用场景结论 1. 引言 智能照明系统通过传感器实时监测环境光照度&#xff0c;并根据光线强度自动调整灯光亮度&#xff0c;达到…

【Xcode Command Line Tools】安装指南

安装指令 xcode-select --install安装 完成安装 验证 $ xcode-select -p /Library/Developer/CommandLineTools