swagger2.0返回值为hashmap(swagger 返回值)

swagger2.0返回值为hashmap(swagger 返回值)1 文章布局展示 标题 内容 图片 无图 单图 多图 2 不同频道的切换 ap article 文章基本信息表 ap article config 文章配置表 ap article content 文章内容表 三张表关系分析 思考 表的垂直拆分 思考 只有 1 张文章信息表就行了 为什么要拆分成文章配置表和文章内容表这多张表 1 3 1 导入数据库

大家好,我是讯享网,很高兴认识大家。



在这里插入图片描述
讯享网
在这里插入图片描述

1.文章布局展示
标题、内容、图片(无图、单图、多图)
2.不同频道的切换
在这里插入图片描述

ap_article 文章基本信息表
在这里插入图片描述
ap_article_config 文章配置表
在这里插入图片描述

ap_article_content 文章内容表
在这里插入图片描述

三张表关系分析
在这里插入图片描述

思考:表的垂直拆分

思考:
只有1张文章信息表就行了,为什么要拆分成文章配置表和文章内容表这多张表?
在这里插入图片描述

1.3.1 导入数据库

查看当天资料文件夹,在数据库连接工具中执行leadnews_article.sql

1.3.2 导入对应的实体类

ap_article文章表对应实体

 

讯享网

ap_article_config文章配置对应实体类

讯享网

ap_article_content 文章内容对应的实体类

 

总结

在这里插入图片描述

在这里插入图片描述

1,在默认频道展示10条文章信息(分页)

2,可以切换频道查看不同种类文章

3,当用户下拉可以加载最新的文章(分页)本页文章列表中发布时间为最大的时间为依据

4,当用户上拉可以加载更多的文章信息(按照发布时间)本页文章列表中发布时间最小的时间为依据

5,如果是当前频道的首页,前端传递默认参数:

  • maxBehotTime:0(毫秒)
  • minBehotTime:000(毫秒)—>2063年

1.4.1 sql练习

讯享网
加载首页 加载更多 加载最新接口路径/api/v1/article/load/api/v1/article/loadmore/api/v1/article/loadnew请求方式POSTPOSTPOST参数ArticleHomeDtoArticleHomeDtoArticleHomeDto响应结果ResponseResultResponseResultResponseResult

1.5.1 响应参数

在这里插入图片描述

1.5.2 响应结果

在这里插入图片描述

1.5.3 步骤

在这里插入图片描述

1.5.4 代码

ArticleHomeDto

 

1.6.1 导入heima-leadnews-article微服务,资料在当天的文件夹中

在这里插入图片描述

只需要拷贝相应的文件
在这里插入图片描述
然后去pom.xml文件下添加子模块
在这里插入图片描述
之后就发现导入的子模块右下角有个蓝色的小点,表示项目导入成功
在这里插入图片描述

注意:需要在heima-leadnews-service的pom文件夹中添加子模块信息,如下:

讯享网

在idea中的maven中更新一下,如果工程还是灰色的,需要在重新添加文章微服务的pom文件,操作步骤如下:
在这里插入图片描述
需要在nacos中添加对应的配置
在这里插入图片描述
配置如下:

 

1.6.2 定义接口

讯享网

1.6.3 编写mapper文件

 

对应的映射文件

在resources中新建mapper/ApArticleMapper.xml 如下配置:

讯享网

1.6.4 编写业务层代码

 

实现类:

讯享网

定义常量类

 

1.6.5 编写控制器代码

讯享网

1.6.6 Swagger测试或前后端联调测试

第一:在app网关的微服务的nacos的配置中心添加文章微服务的路由,完整配置如下:
在这里插入图片描述

 

第二:启动nginx,直接使用前端项目测试,启动文章微服务,用户微服务、app网关微服务

这边启动文章微服务会碰到下面的问题,如果是找不到文件,就把target删除,然后重新编译
在这里插入图片描述
点击compile即可
在这里插入图片描述
另一个错误还是redis,只需要调整相应的配置文件即可
在这里插入图片描述

添加如下redis配置
在这里插入图片描述
启动
在这里插入图片描述

方案1

在这里插入图片描述

方案2 静态模板展示

在这里插入图片描述

​ FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

​ 模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

在这里插入图片描述

2.1.1 技术选型对比

常用的java模板引擎还有哪些?

Jsp、Freemarker、Thymeleaf 、Velocity 等。

1.Jsp 为 Servlet 专用,不能单独进行使用。

2.Thymeleaf 为新技术,功能较为强大,但是执行的效率比较低。

3.Velocity从2010年更新完 2.0 版本后,便没有在更新。Spring Boot 官方在 1.4 版本后对此也不在支持,虽然 Velocity 在 2017 年版本得到迭代,但为时已晚。

4.Freemarker 性能好,强大的模板语,轻量

总结:
在这里插入图片描述

freemarker作为springmvc一种视图格式,默认情况下SpringMVC支持freemarker视图格式。

需要创建Spring Boot+Freemarker工程用于测试模板。

2.2.1 创建测试工程

创建一个freemarker-demo 的测试工程专门用于freemarker的功能测试与模板的测试。

pom.xml如下

讯享网

2.2.2 配置文件

配置application.yml

 

2.2.3 创建模型类

在freemarker的测试工程下创建模型类型用于测试

讯享网

2.2.4 创建模板

在resources下创建templates,此目录为freemarker的默认模板存放目录。

在templates下创建模板文件 01-basic.ftl ,模板中的插值表达式最终会被freemarker替换成具体的数据。

在这里插入图片描述

 

2.2.5 创建controller

创建Controller类,向Map中添加name,最后返回模板文件。

讯享网

01-basic.ftl,使用插值表达式填充数据

 

2.2.6 创建启动类

讯享网

2.2.7 测试

请求:http://localhost:8881/basic
这里可能会有404的情况,原因是controller中的返回值不要带文件的后缀
在这里插入图片描述
登录后界面如下:
在这里插入图片描述

这里我们不禁会疑问,为啥Spring能通过这个字符串找到模板文件
原理
FreeMarkerAutoConfiguration
在这里插入图片描述
FreeMarkerProperties
在这里插入图片描述
综上所述可以定位到。

2.2.8 更改模板文件的后缀名

在这里插入图片描述
先注释掉suffix: .ftl ,这样默认会读取ftlh的后缀
在这里插入图片描述
那么我们需要重命名一下配置文件01-basic.ftlh
在这里插入图片描述
重启项目后,依然没有问题
在这里插入图片描述
同理html一样的

总结:
在这里插入图片描述

2.3.1 基础语法种类

1、注释,即<#– –>,介于其之间的内容会被freemarker忽略

 

2、插值(Interpolation):即 部分,freemarker会用真实的值代替

讯享网

3、FTL指令:和HTML标记类似,名字前加#予以区分,Freemarker会解析标签中的表达式或逻辑。

 

4、文本,仅文本信息,这些不是freemarker的注释、插值、FTL指令的内容会被freemarker忽略解析,直接输出内容。

讯享网

2.3.2 集合指令(List和Map)

1、数据模型:
List集合的遍历
在这里插入图片描述
Map集合的遍历
在这里插入图片描述
在HelloController中新增如下方法:

 

2、模板:

在templates中新增文件

讯享网

启动后,如图
在这里插入图片描述

实例代码:

 

👆上面代码解释:

list添加完后启动如图:
在这里插入图片描述
获取map之后的界面如图
在这里插入图片描述
遍历map之后的界面如图
在这里插入图片描述

2.3.3 if指令

在这里插入图片描述

​ if 指令即判断指令,是常用的FTL指令,freemarker在解析时遇到if会进行判断,条件为真则输出if中间的内容,否则跳过内容不再输出。

  • 指令格式
讯享网

1、数据模型:

使用list指令中测试数据模型,判断名称为小红的数据字体显示为红色。

2、模板:

 

实例代码:

讯享网

3、输出:

姓名为“小红”则字体颜色显示为红色。
在这里插入图片描述

2.3.4 运算符

1、算数运算符

FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:

  • 加法:
  • 减法:
  • 乘法:
  • 除法:
  • 求模 (求余):

模板代码

 

除了 + 运算以外,其他的运算只能和 number 数字类型的计算。

2、比较运算符

  • 或者:判断两个值是否相等.
  • :判断两个值是否不等.
  • 或者:判断左边值是否大于右边值
  • 或者:判断左边值是否大于等于右边值
  • 或者:判断左边值是否小于右边值
  • 或者:判断左边值是否小于等于右边值

= 和 == 模板代码

讯享网

Controller 的 数据模型代码

 

比较运算符注意

  • 可以用于字符串、数值和日期来比较是否相等
  • 两边必须是相同类型的值,否则会产生错误
  • 字符串 比较是不等的.因为FreeMarker是精确比较。第一个是小写x,第二个是x加空格,第三个是大写的X。
  • 其它的运行符可以作用于数字和日期,但不能作用于字符串
  • 使用等字母运算符代替会有更好的效果,因为 FreeMarker会把解释成FTL标签的结束字符
  • 可以使用括号来避免这种情况,如:

3、逻辑运算符

  • 逻辑与:&&
  • 逻辑或:||
  • 逻辑非:!

逻辑运算符只能作用于布尔值,否则将产生错误 。

模板代码

讯享网

2.3.5 空值处理

1、判断某变量是否存在使用 “??”
比如我们把list的传参注释掉
在这里插入图片描述
再看网页,会报错
在这里插入图片描述
报错信息很明显,没有空值判断
在这里插入图片描述

用法为:variable??,如果该变量存在,返回true,否则返回false

例:为防止stus为空报错可以加上判断如下:

 
讯享网

在这里插入图片描述

2、缺失变量默认值使用 “!”
比如我们注释掉name的入参
在这里插入图片描述
访问网页,会报错
在这里插入图片描述
后台报错信息,需要对name判空处理
在这里插入图片描述

  • 使用!要以指定一个默认值,当变量为空时显示默认值

    例: \({name!‘’}表示如果name为空显示空字符串。<br /> 更改如下&#xff1a;<br /> <img src="https://img-blog.csdnimg.cn/be211ace78876f6aa64610a2ff.png#pic_center" alt="在这里插入图片描述" /></p> </li></ul> <pre></pre> <p>再次登录&#xff0c;没有问题了<br /> <img src="https://img-blog.csdnimg.cn/e53e1ff6f4614f86a2523b0551b36311.png#pic_center" alt="在这里插入图片描述" /></p> <ul><li> <p>如果是嵌套对象则建议使用&#xff08;&#xff09;括起来</p> <p>例&#xff1a; \){(stu.bestFriend.name)!‘’}表示,如果stu或bestFriend或name为空默认显示空字符串。

2.3.6 内建函数

内建函数语法格式:

1、和到某个集合的大小

在这里插入图片描述
再比如我们在02-list.ftlh中增加

 

在这里插入图片描述

2、日期格式化

显示年月日:
显示时分秒:
显示日期+时间:
自定义格式化:

HelloController.java新增方法

讯享网

创建新文件04-date.ftlh

 

访问网页
在这里插入图片描述
自定义格式

讯享网

访问网页
在这里插入图片描述

3、内建函数

model.addAttribute(“point”, );

point是数字型,使用${point}会显示这个数字的值,每三位使用逗号分隔。

如果不想显示为每三位分隔的数字,可以使用c函数将数字型转成字符串输出

HelloController.java新增方法

 

创建文件05-c.ftlh

讯享网

效果如下:
在这里插入图片描述
使用内建函数

 

在这里插入图片描述

4、将json字符串转成对象

一个例子:

其中用到了 assign标签,assign的作用是定义一个变量。

讯享网

模板代码:

 

内建函数模板页面:

讯享网

内建函数Controller数据模型:

 

总结:
在这里插入图片描述

之前的测试都是SpringMVC将Freemarker作为视图解析器(ViewReporter)来集成到项目中,工作中,有的时候需要使用Freemarker原生Api来生成静态内容,下面一起来学习下原生Api生成文本文件。

2.4.1 需求分析

使用freemarker原生Api将页面生成html文件,本节测试html文件生成的方法:
在这里插入图片描述

2.4.2 静态化测试

根据模板文件生成html文件

①:修改application.yml文件,添加以下模板存放位置的配置信息,完整配置如下:
在这里插入图片描述

讯享网

②:在test下创建测试类

 

执行测试类后在文件路径中,多出了html文件
在这里插入图片描述

MinIO基于Apache License v2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来。

MinIO兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

S3 ( Simple Storage Service简单存储服务)

基本概念

  • bucket – 类比于文件系统的目录
  • Object – 类比文件系统的文件
  • Keys – 类比文件名

官网文档:http://docs.minio.org.cn/docs/

  • 数据保护

    Minio使用Minio Erasure Code(纠删码)来防止硬件故障。即便损坏一半以上的driver,但是仍然可以从中恢复。

  • 高性能

    作为高性能对象存储,在标准硬件条件下它能达到55GB/s的读、35GB/s的写速率

  • 可扩容

    不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并跨越多个数据中心

  • SDK支持

    基于Minio轻量的特点,它得到类似Java、Python或Go等语言的sdk支持

  • 有操作页面

    面向用户友好的简单操作界面,非常方便的管理Bucket及里面的文件资源

  • 功能简单

    这一设计原则让MinIO不容易出错、更快启动

  • 丰富的API

    支持文件资源的分享连接及分享链接的过期策略、存储桶操作、文件列表访问及文件上传下载的基本功能等。

  • 文件变化主动通知

    存储桶(Bucket)如果发生改变,比如上传对象和删除对象,可以使用存储桶事件通知机制进行监控,并通过以下方式发布出去:AMQP、MQTT、Elasticsearch、Redis、NATS、MySQL、Kafka、Webhooks等。

在这里插入图片描述

在这里插入图片描述

3.3.1 安装启动

我们提供的镜像中已经有minio的环境

我们可以使用docker进行环境部署和启动

讯享网

3.3.2 管理控制台

假设我们的服务器地址为http://192.168.200.130:9000,我们在地址栏输入:http://192.168.200.130:9000/ 即可进入登录界面。

在这里插入图片描述

Access Key为minioadmin Secret_key 为minioadmin 进入系统后可以看到主界面
在这里插入图片描述

点击右下角的“+”号 ,点击下面的图标,创建一个桶
在这里插入图片描述
我们创建一个桶名字为leadnews
在这里插入图片描述

3.4.1 创建工程,导入pom依赖

创建minio-demo,对应pom如下

 

引导类:

讯享网

创建测试类,上传html文件

 

运行完之后,文件上传成功了
在这里插入图片描述
但是现在文件查看不了,也没办法修改,需要我们修改权限,步骤如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这个时候,就可以访问控制台输出的路径了
在这里插入图片描述

在这里插入图片描述
具体步骤如下:
在这里插入图片描述

在这里插入图片描述
在父工程的pom.xml文件中添加

讯享网

在这里插入图片描述
添加完后,文件右下角出现蓝点
在这里插入图片描述

3.5.1 创建模块heima-file-starter

在minio-demo模块中导入依赖
在这里插入图片描述

 

导入依赖

讯享网

3.5.2 配置类

MinIOConfigProperties

 

MinIOConfig

讯享网

3.5.3 封装操作minIO类

FileStorageService

 

MinIOFileStorageService

讯享网

3.5.4 对外加入自动配置

在resources中新建

 

3.5.5 其他微服务使用

第一,导入heima-file-starter的依赖

第二,在微服务中添加minio所需要的配置

在minio-demo模块下创建配置文件application.yml

讯享网

第三,在对应使用的业务类中注入FileStorageService,样例如下:

 

注入后,运行测试类
在这里插入图片描述

在这里插入图片描述

方案一

用户某一条文章,根据文章的id去查询文章内容表,返回渲染页面
在这里插入图片描述

方案二

在这里插入图片描述

1.在artile微服务中添加MinIO和freemarker的支持,参考测试项目
直接把freemarker-demo和minio-demo模块相关的依赖和文件拷贝去heima-leadnews-article即可
在这里插入图片描述

2.资料中找到模板文件(article.ftl)拷贝到article微服务下
在这里插入图片描述
在这里插入图片描述

3.资料中找到index.js和index.css两个文件手动上传到MinIO中
在这里插入图片描述

讯享网

运行后上传成功
在这里插入图片描述
js文件的上传同理即可。

4.在文章微服务中导入依赖

 

5.新建ApArticleContentMapper

讯享网

6.在artile微服务中新增测试类(后期新增文章的时候创建详情静态页,目前暂时手动生成)

 

运行之前static_url为空
在这里插入图片描述
运行之后static_url有字段填充,是一个url地址,我们访问一下,可以看到相关字段
在这里插入图片描述

在这里插入图片描述

小讯
上一篇 2025-06-08 14:09
下一篇 2025-05-08 15:56

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/136455.html