SpringBoot系列教程web篇之返回文本、网页、图片的操作姿势

这篇具有很好参考价值的文章主要介绍了SpringBoot系列教程web篇之返回文本、网页、图片的操作姿势。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇将主要介绍以下几种数据格式的返回实例

  • 返回文本

  • 返回数组

  • 返回json串

  • 返回静态网页

  • 返回图片

I. 环境搭建

首先得搭建一个web应用才有可能继续后续的测试,借助SpringBoot搭建一个web应用属于比较简单的活;

创建一个maven项目,pom文件如下

springboot 怎么向前端返回文件,spring boot,前端,java,学习

依然是一般的流程,pom依赖搞定之后,写一个程序入口

springboot 怎么向前端返回文件,spring boot,前端,java,学习

II. 数据返回姿势实例

以下返回实例都放在同一个Controller中,具体定义如下

springboot 怎么向前端返回文件,spring boot,前端,java,学习

1. 文本返回

这个属于基础功能了,发起请求,返回一串文本,在SpringMVC的体系中,要实现这种通常的写法通常是直接定义方法的返回为String;当然还有另外一种非常基础的写法,直接将返回的数据通过 HttpServletResponse写入到输出流中

下面给出这两种写法的实例

springboot 怎么向前端返回文件,spring boot,前端,java,学习

注意上面的实现中,方法上面多了一个注解 @ResponseBody,这个表示返回数据,而不是视图(后面会详细说明)

strRsp2的输出借助了FastJson来实现将map序列化为json串,然后写入输出流

实例访问如下

springboot 怎么向前端返回文件,spring boot,前端,java,学习

从上面的输出也可以看出,第一种返回方式, ResponseHeadersContent-Type:text/html;charset=UTF-8;而第二种方式则没有这个响应头,需要我们自己主动设置(这里注意一下即可,在后面的返回图片中有实例)

2,返回数组

前面请求参数的博文中,我们看到请求参数允许传入数组,那么我们返回可以直接返回数组么?讲道理的话,应该没啥问题

springboot 怎么向前端返回文件,spring boot,前端,java,学习

然后请求输出为

springboot 怎么向前端返回文件,spring boot,前端,java,学习 

注意下响应头,为 application/json, 也就是说SpringMVC将数组当成json串进行返回了

3. Bean返回

在我们实际的业务开发中,这种应该属于非常常见的使用姿势了,直接返回一个POJO,调用者接收的是一个json串,可以很容易的反序列化为需要的对象

springboot 怎么向前端返回文件,spring boot,前端,java,学习

springboot 怎么向前端返回文件,spring boot,前端,java,学习

4. 网页返回

前面都是直接返回数据,但是我们平常在使用浏览器,更多的是发起一个请求,然后返回一个网页啊,难道说springmvc不能直接返回网页么?

当然返回网页怎么可能会不支持,(题外话:个人感觉在前后端分离逐渐流行之后,直接由后端返回网页的case不太多了,前端和后端作为独立的项目部署,两者之间通过json串进行交流;这里扯远了),我们下面看一下SpringMVC中如何返回网页

我们可以从上面直接返回字符串的case中,得到一个思路,如果我直接返回一个html文本,会怎样?既然返回 content-typetext/html,那浏览器应该可以解析为网页的,下面实测一下

  1. @ResponseBody

  2. @GetMapping(path = "html")

  3. public String strHtmlRsp() {

  4. return "<html>\n" + "<head>\n" + " <title>返回数据测试</title>\n" + "</head>\n" + "<body>\n" +

  5. "<h1>欢迎欢迎,热烈欢迎</h1>\n" + "</body>\n" + "</html>";

  6. }

测试如下

springboot 怎么向前端返回文件,spring boot,前端,java,学习

浏览器发起请求之后,将我们返回的html文本当做网页正常渲染了,所以我们如果想返回网页,就这么干,没毛病!

上面这种方式虽然说可以返回网页,然而在实际业务中,如果真要我们这么干,想想也是可怕,还干什么后端,分分钟全栈得了!!!

下面看一下更常规的写法,首先我们需要配置下返回视图的前缀、后缀, 在 application.yml配置文件中添加如下配置

springboot 怎么向前端返回文件,spring boot,前端,java,学习

 文章来源地址https://www.toymoban.com/news/detail-833932.html

然后我们的静态网页,放在资源文件的static目录下,下面是我们实际的项目截图,index.html为我们需要返回的静态网页

springboot 怎么向前端返回文件,spring boot,前端,java,学习

接下来就是我们的服务接口

springboot 怎么向前端返回文件,spring boot,前端,java,学习

注意下上面的接口,没有 @ResponseBody注解,表示这个接口返回的是一个视图,会从static目录下寻找名为 index.html(前缀路径和后缀是上面的application.yml中定义)的网页返回

实测case如下

springboot 怎么向前端返回文件,spring boot,前端,java,学习

5. 图片返回

图片返回与前面的又不太一样了,上面介绍的几种case中,要么是返回文本,要么返回视图,而返回图片呢,更多的是返回图片的字符数组,然后告诉浏览器这是个图片,老哥你按照图片渲染

直接返回二进制流,上面在介绍文本返回的两种方式中,有个直接通过 HttpServletResponse向输出流中写数据的方式,我们这里是不是可以直接这么用呢?

下面给出一个从网络下载图片并返回二进制流的实际case

springboot 怎么向前端返回文件,spring boot,前端,java,学习

注意下上面的实例case,首先设置了返回的 ContentType,然后借助 ImateIO来下载图片(个人不太建议这种写法,很容易出现403;这里演示主要是为了简单...),并将图片写入到输出流

实例演示如下

springboot 怎么向前端返回文件,spring boot,前端,java,学习

III 小结

1. 返回数据小结

本篇博文主要介绍了几种常见数据格式的返回使用姿势,本文更多的是一种使用方式的实例case演示,并没有涉及到底层的支持原理,也没有过多的提及如何设置响应头,web交互中常见的cookies/session也没有说到,这些将作为下篇的内容引入,恳请关注

下面做一个简单的小结

返回纯数据

  • 添加 @ResponseBody注解,则表示我们返回的是数据,而不需要进行视图解析渲染;

  • 如果一个controller中全部都是返回数据,不会返回视图时,我们可以在添加 @RestController注解,然后这个类中的接口都不需要添加 @ResponseBody注解了

  • 返回视图时,我们会根据接口返回的字符串,结合定义的前缀,后缀,到资源路径的static目录下寻找对应的静态文件返回

  • 可以直接通过向 HttpServletResponse的输出流中写数据的方式来返回数据,如返回图片常用这种case

 

到了这里,关于SpringBoot系列教程web篇之返回文本、网页、图片的操作姿势的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP32-Web-Server编程-在网页中插入图片

    图胜与言,在网页端显示含义清晰的图片,可以使得内容更容易理解。 本节演示在 ESP32 Web 服务器上插入若干图片。在插入图片时还可以对图片设置一个超链接,用户点击该图片时,网页将跳转到图片对应的链接网址。 目录结构 目录结构主要包含主目录 main,以及组件目录

    2024年02月05日
    浏览(32)
  • springboot后端存储富文本内容(含图片内容)

    springboot:后端快速应用开发框架。 tinymce:简单的富文本编辑器。 base64:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。编码规则:把3个字节变成4个字节;每76个字符加一个换行符;最后的结束符也要处理

    2024年02月02日
    浏览(37)
  • 【AIGC-文本/图片生成视频系列-10】SparseCtrl:在文本生成视频的扩散模型中添加稀疏控制

    目录 一. 项目概述 二. 方法详解 三. 应用结果 四.个人思考 由于扩散模型生成空间的不确定性,仅仅通过文本生成视频时,会导致模糊的视频帧生成。 今天解析的SparseCtrl,是一种有效解决上述问题的方案,通过带有附加编码器的时间稀疏条件图来控制文本到视频的生成。

    2024年04月15日
    浏览(35)
  • 【AIGC-文本/图片生成视频系列-9】MagicVideo-V2: 多阶段高美感视频生成

    目录 一. 项目概述与贡献 二. 方法详解​编辑 三. 文本生成视频相关结果 四. 与其他方法对比结果 五. 个人感悟 最近得益于扩散模型的快速发展,文本到视频(T2V)模型的激增。 今天要介绍的是字节的MagicVideo-V2,一个新颖的多阶段 T2V 框架,它集成了 文本到图像 (T2I)、图像

    2024年01月19日
    浏览(31)
  • springboot web & 增加不存在的url返回200状态码& vue 打包设置

    spring boot项目增加 html web页面访问 1. 首先 application.properties 文件中增加配置,指定静态资源目录(包括html的存放) 2. 项目目录 3. 如果有实现 WebMvcConfigurer  类的,增加实现 如果访问不到页面的,可以检查下application配置文件是否有以下配置 如果有的话,需要进行注释。这两

    2024年02月09日
    浏览(41)
  • web网页端使用webSocket实现语音通话功能(SpringBoot+VUE)

    最近在写一个web项目,需要实现web客户端之间的语音通话,期望能够借助webSocket全双工通信的方式来实现,但是网上没有发现可以正确使用的代码。网上能找到的一个代码使用之后 只能听到“嘀嘀嘀”的杂音 解决方案: 使用Json来传递数据代替原有的二进制输入输出流 技术

    2024年02月02日
    浏览(94)
  • ElasticSearch系列 - SpringBoot整合ES:指定搜索结果返回的字段_source

    Elasticsearch的搜索结果可以通过以下参数进行控制: from:指定搜索结果的起始位置,默认为0。 size:指定返回的文档数量,默认为10。 sort:指定搜索结果的排序方式,可以按照字段升序或降序排列。 query:指定搜索的查询条件,可以使用各种查询语句进行搜索。 filter:指定

    2024年02月04日
    浏览(43)
  • [HTML]Web前端开发技术2(HTML5、CSS3、JavaScript )格式化文本标记,定义列表,<blockquote>,definition description,ruby——喵喵画网页

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 格式化文字与段落 Web页面设计原则 向Web页面添加文字信息 格式化文本标记 标题字标记 添加空格与特

    2024年02月05日
    浏览(70)
  • Ueditor 百度强大富文本Springboot 项目集成使用(包含上传文件和上传图片的功能使用)简单易懂,举一反三

    首先如果大家的富文本中不考虑图片或者附件的情况下,只考虑纯文本且排版的情况下我们可以直接让前端的vue来继承UEditor就可以啦。但是要让前端将那几个上传图片和附件的哪些功能给阉割掉! 然后就是说如果考虑到了上传图片或者视频和附件那么咱们还是用的前后分离

    2024年02月15日
    浏览(40)
  • Hugging Face实战-系列教程3:AutoModelForSequenceClassification文本2分类

    有任何问题欢迎在下面留言 本篇文章的代码运行界面均在notebook中进行 本篇文章配套的代码资源已经上传 下篇内容: Hugging Face实战-系列教程4:padding与attention_mask ​输出我们需要几个输出呢?比如说这个cls分类,我们做一个10分类,可以吗?对每一个词做10分类可以吗?预测

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包