网页使用之如何返回json/xml

后端返回json数据给前端进行渲染的方式比较熟悉,至于返回html页面,返回xml的方式接触逐渐减少,来在项目中熟悉这一点。

返回文本数据

json姿势的返回实属最简单的方式,在SpringBoot应用中,有两种简单的方式

1.直接在Controller上添加@RestController注解

如admin下的相关接口,都是直接返回json数据的

返回结果为:

2、在方法上添加@ResponseBody注解

如果类上的是@Controller那么要实现,返回的是json数据,就需要在方法上加入注解@ResponseBody,以扫码的登录为例



3、HttpServletResponse输出

很基础的一种写法,直接将返回的数据通过HttpServletResponse写入到输出流中,比较不常见

如:直接在TestController中写一个demo

    @RequestMapping(path = "text" ,produces = "application/json;charset=utf-8")
    public void  tt(HttpServletResponse response)throws IOException {
        //输出到response里
        Map<String, Integer> map = MapUtils.create("hell", 123, "word", "ounijia");
        response.getOutputStream().write(JsonUtil.toStr(map).getBytes(StandardCharsets.UTF_8));
        response.getOutputStream().flush();
    }

这种场景在项目中有体现。

技术派项目后端,同时支持返回页面+json数据两种方式,因此在异常场景下,某些case希望返回500错误页面(如前台页面访问);又比如(后台admin接口访问),希望返回的是500异常状态码。

对应的实现在全局异常处理中,进行分条件输出

com/github/paicoding/forum/web/global/ForumExceptionHandler.resolveException

返回网页

网页实际上也是一种文本,我们这里说到返回网页,更准一点来说的表达是返回渲染视图,现在技术派的前台,是基于thymleaf渲染引擎实现的网页渲染。

1、项目结构

所有静态资源相关的信息,存储在独立的模块paicoding-ui 中(完全可以使用freemaker等其他的渲染引擎来替换整个前台网站)

前端资源文件默认放在resources目录下。

templates:存放模板文件,可以理解为编写的xml,注意文件名不能有问题

static:存放静态资源文件,如js,css,image等

2、配置

web相关配置application-web.yml

spring:
  thymeleaf:
    mode: HTML
    encoding: UTF-8
    servlet:
      content-type: text/html
    cache: false

3、后端返回

后台返回视图的接口,与前面的区别在于Controller上的注解是@Controller,方法上没有RestController

重点关注上面的返回,是一个String,对应的是模板的相对路径。

xml返回

直接支持XML格式文档的返回,主要用于站点地图+微信公众号的回调相应。

1、返回xml

主要通过设置返回的请求头,来标记返回的数据类型;其他的用法,与返回文本时类似(@RestController+@ResponseBody两种标注方式)

如实际的使用场景:

对应的返会

2、返回xml文件

看了 SiteMapController 的实现,直接返沪xml文件,主要给搜索引擎使用。

3、返回相关配置

技术派的项目中,同时支持返回json/xml,那么他们会冲突么?比如我希望所有的接口,默认返回都是json,只有特定的接口返回的才是xml,那么会和我们预期的一致么?
如果不进行特殊配置,可能是无法达到我们上面的诉求的,因此在技术派中,有一个 XmlwebConfig 的配置,主要就是解决这个问题。

返回图片

还有场景是,直接接口返回图片

    /**
     * 返回图片,直接接口返回图片
     */

    @GetMapping(path = "img")
    public  void  imgRsp(HttpServletResponse response) throws IOException {
        response.setContentType("image/png");
        ServletOutputStream outputStream = response.getOutputStream();
        String path = "https://copyright.bdstatic.com/vcg/creative/cc9c744cf9f7c864889c563cbdeddce6.jpg@h_1280";
        URL url = new URL(path);
        BufferedImage img = ImageIO.read(url);
        ImageIO.write(img ,"png" ,response.getOutputStream());
        System.out.println("");
        

    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

S32K的JLINK与PE接线方法与刷程序失败问题

S32K的JLINK与PE接线方法与刷程序失败问题 1、PE的接线方法2、JLINK的接线方法3、刷程序失败问题 1、PE的接线方法 2、JLINK的接线方法 3、刷程序失败问题 出现如下问题&#xff1a; Secure Debug might be enabled on this device.lf so.please unlock the device via PEmic…

一段音频驱动照片唱歌,EMO模型上线通义APP

把一段音频、一张照片输入AI模型&#xff0c;就能让图中人物开口唱歌说话&#xff0c;让奥黛丽赫本唱《上春山》、陶俑仕女说英文RAP、爱因斯坦说中文段子。不久前&#xff0c;这款名为EMO的模型因为阿里通义实验室的一篇论文火遍海内外&#xff0c;模型的产品化进程也广受关注…

运动耳机哪个牌子性价比高?推荐五款高性价比运动耳机

跑步、健身、游泳……无论你的运动喜好是什么&#xff0c;一款好的运动蓝牙耳机都能为你的运动体验加分。然而&#xff0c;市面上的运动蓝牙耳机品牌众多&#xff0c;如何选择一款既舒适又实用的产品呢&#xff1f;本文将为你提供一些选购运动蓝牙耳机建议&#xff0c;并为你推…

企业规模扩大,SD-WAN实现跨省快速组网

随着数字化时代的飞速发展&#xff0c;企业面临着前所未有的挑战与机遇。5G、VoIP、AI和物联网等新技术的兴起&#xff0c;不仅改变了商业格局&#xff0c;也对企业网络提出了更高的要求。随着企业规模的不断扩大&#xff0c;企业如何搭建跨省的、高性能、超融合、简化运维的组…

解决Jmeter 4.x 请求到elasticsearch 中文乱码的问题

文章目录 前言解决Jmeter 4.x 请求到elasticsearch 中文乱码的问题 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#…

MOS产品在光伏逆变器上的应用与数据分析

2023年全球光伏装机量表现优异&#xff0c;根据BloombergNEF统计数据&#xff0c;2023年全球光伏新增装机量444GW&#xff0c;同比增长76.2%&#xff0c;其中约一半新增装机量来自中国。 中国光伏新技术迭代不断&#xff0c;产业链降本增效加速。根据CPIA数据&#xff0c;2022年…

Linux网络-DNS域名解析服务

目录 一.DNS相关介绍 1.DNS是什么 2.DNS系统的分布式数据结构 根域 顶级域 二级域 子域 主机 3.服务器类型 主域名服务器 从域名服务器 缓存域名服务器 转发域名服务器 二.DNS域名解析 1.DNS域名解析方式及功能 2.DNS域名解析查询方式 2.1.递归查询&#xff0…

【LLM多模态】Qwen-VL模型结构和训练流程

note 观点&#xff1a;现有很多多模态大模型是基于预训练&#xff08;和SFT对齐&#xff09;的语言模型&#xff0c;将视觉特征token化并对齐到语言空间中&#xff0c;利用语言模型得到多模态LLM的输出。如何设计更好的图像tokenizer以及定位语言模型在多模态LLM中的作用很重要…

零基础HTML教程(27)--表单元素属性

文章目录 1. 背景2. disabled:禁用3. readonly:直读4. checked:选中5. maxlength:最大输入字符数6. 小结 1. 背景 上一篇我们讲了表单元素的两个属性id和name&#xff0c;其实表单元素还有其他几个常用属性&#xff0c;我们逐一介绍。 2. disabled:禁用 disabled属性表示禁用…

大厂面试题:从源码的角度分析MyBatis中#{}与${}的区别

大家好&#xff0c;我是王有志。 今天我会通过源码来分析一道京东&#xff0c;联储证券和爱奇艺都考察过的 MyBatis 面试题&#xff1a;MyBatis 中“#{}”和“${}”有什么区别&#xff1f;是否可以使用“#{}”来传递 order by 的动态列&#xff1f; “#{}”和“${}”有什么区…

【Linux】网络与守护进程

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;进程状态、类型、优先级、命令行参数概念、环境变量(重要)、程序地址空间 目录 &#x1f449;&#x1f3fb;守护…

Netty 进阶

文章目录 1. 粘包与半包1.1 粘包现象1.2 半包现象1.3 现象分析1.4 解决方案1) 方法1&#xff0c;短链接2) 方法2&#xff0c;固定长度3) 方法3&#xff0c;固定分隔符4) 方法4&#xff0c;预设长度 2. 协议设计与解析2.1 为什么需要协议&#xff1f;2.2 redis 协议举例2.3 http…

【小白版】最简单的 goland 自定义package 教程

正文 直奔主题&#xff0c;针对小白无法正确使用自定义的package包进行讲解。 在自己的go项目下执行 mod go mod init 项目名创建mod。mod是go管理依赖包的工具&#xff0c;类似Java的pom文件调整goland的配置&#xff0c;具体操作步骤如下面视频 通过视频可以看到原先报红的…

【分配】linear_sum_assignment函数

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 分配问题小结&#xff0c; linear_sum_assignment 函数使用的是Jonker-Volgenant algorithm算法 1. 分配问题 有工人和相应的工作&#xff0c;每个工作…

51单片机中断和定时的结合应用

#include <reg52.h>unsigned int cnt 0;sbit led P1^1;// 初始化定时器 void TimerSetup(){TMOD 0x01; // 定时器的第1个模式TH0 0xB8; // 定时器的初始值-高位TL0 0x00; // 定时器的初始值-低位TR0 1; //启动定时器cnt 0;EA 1; // 开启总中断ET0 1; // 时间中断…

DFS和回溯专题:全排列 II

DFS和回溯专题&#xff1a;全排列 II 题目链接: 全排列 II 参考题解 代码随想录 题目描述 代码纯享版 class Solution {public List<List<Integer>> list_all new ArrayList();public List<Integer> list new ArrayList();public int[] res;public Lis…

NVIDIA CUDA Toolkit

NVIDIA CUDA Toolkit CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developer CUDA Toolkit是用于CUDA开发的软件包&#xff0c;主要包括CUDA编译器、运行时库、GPU驱动程序和开发工具等。它允许开发者使用通用编程语言&#xff08;如C、C&#xff09;来利用NVIDIA GPU进行…

echart-better基于最新的echarts5.5标题旋转功能

使用教程以及相关的echarts-better最新的包在这里&#xff1a;https://edu.csdn.net/course/detail/24569 echarts在侧边竖向展示标题&#xff0c;以及次标题 主标题和次标题进行旋转&#xff0c;适用于移动端或其他场景。

如何安装mysl驱动程序jar包

简介&#xff08;为什么要安装mysql驱动jar包&#xff09; MySQL 驱动程序&#xff08;通常以 JAR 文件的形式提供&#xff09;用于在 Java 应用程序中连接和与 MySQL 数据库进行交互。这些驱动程序提供了一组 API&#xff0c;使 Java 应用程序能够执行诸如查询、插入、更新和…

大数据真题讲解系列——拼多多数据分析面试题

拼多多数据分析面试题&#xff1a;连续3次为球队得分的球员名单 问题&#xff1a; 两支篮球队进行了激烈的比赛&#xff0c;比分交替上升。比赛结束后&#xff0c;你有一个两队分数的明细表&#xff08;名称为“分数表”&#xff09;。表中记录了球队、球员号码、球员姓名、得…