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

news2024/10/6 8:33:13

后端返回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("");
        

    }

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

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

相关文章

【docker 】Windows10安装 Docker

安装 Hyper-V Hyper-V 是微软开发的虚拟机&#xff0c;仅适用于 Windows 10。 按键&#xff1a; win键X &#xff0c;选着程序和功能 在查找设置中输入&#xff1a;启用或关闭Windows功能 选中Hyper-V 点击确定 安装 Docker Desktop for Windows Docker Desktop 官方下载…

LeetCode46:全排列

题目描述 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案 解题思想 使用used记录元素是否使用过&#xff0c;排列是有序的&#xff0c;要注意与组合的区别。 代码 class Solution { public:vector<vector<int>…

在线教程|零门槛部署 Llama 3,70B 版本只占 1.07G 存储空间,新用户免费体验 8B 版本

4 月 18 日&#xff0c;Meta 宣布开源 Llama 3&#xff0c;这个号称「迄今为止最好的开源大模型」一经发布&#xff0c;立刻引爆科技圈&#xff01; 发布当天恰逢斯坦福大学教授、AI 顶尖专家吴恩达的生日&#xff0c;作为 AI 开源倡导者&#xff0c;他激动地发文表示&#xff…

Llama 3 ——开源大模型Llama 3从概念到使用

概述 Meta公司自豪地宣布推出其最新的开源大型语言模型——Llama 3&#xff0c;这是一款专为未来AI挑战而设计的先进工具。Llama 3包含两个不同参数规模的版本&#xff0c;以满足多样化的计算需求&#xff1a; 8B版本&#xff1a;优化了在消费级GPU上的部署和开发流程&#xf…

二、VLAN原理和配置

vlan不是协议&#xff0c;是一个技术&#xff0c;虚拟局域网技术&#xff0c;基于802.1q协议。 vlan&#xff08;虚拟局域网&#xff09;&#xff0c;将一个物理的局域网在逻辑上划分成多个广播域的技术。 目录 1.冲突域和广播域 概念 范围 2.以太网帧格式 3.以太网帧封装…

自动驾驶中的深度学习和计算机视觉

书籍&#xff1a;Applied Deep Learning and Computer Vision for Self-Driving Cars: Build autonomous vehicles using deep neural networks and behavior-cloning techniques 作者&#xff1a;Sumit Ranjan&#xff0c;Dr. S. Senthamilarasu 出版&#xff1a;Packt 书籍…

使用LocalGPT+cpolar打造可远程访问的本地私有类chatgpt服务

文章目录 前言环境准备1. localGPT部署2. 启动和使用3. 安装cpolar 内网穿透4. 创建公网地址5. 公网地址访问6. 固定公网地址 前言 本文主要介绍如何本地部署LocalGPT并实现远程访问&#xff0c;由于localGPT只能通过本地局域网IP地址端口号的形式访问&#xff0c;实现远程访问…

电子式汽车机油压力传感器的接线方法及特点

电子式机油压力传感器由厚膜压力传感器芯片、信号处理电路、外壳、固定电路板装置和两根引线&#xff08;信号线和报警线&#xff09;组成。信号处理电路由电源电路、传感器补偿电路、调零电路、电压放大电路、电流放大电路、滤波电路和报警电路组成。 厚膜压力传感器是20世纪…

杰发科技AC7840——SPI通信简介(1)_跑通Demo

0. 简介 一些配置项&#xff1a; CPHA&#xff1a;相序 CPLO&#xff1a;极性 看着demo需要按键&#xff0c;于是去掉按键&#xff0c;去掉打印&#xff0c;直接输出波形看逻辑分析仪的信号。 其实现在做这些demo测试应该都有逻辑分析仪&#xff0c;直接看波形更直观一点。…

git误操作版本回退的方法

场景&#xff1a;在使用git进行代码提交的时候不小心执行了git reset 命令进行了版本回退但是在这之前进行了git add . git commit -m "提交"等命令&#xff0c;正常情况下就可以直接使用 git reset 版本号 进行代码的回退&#xff0c;但是发现自己不能找打上一个提…

搭建MongoDB副本集

文章目录 一、什么是MongoDB的副本集二、副本集的架构三、副本集的成员四、部署副本集1、节点划分2、安装MongoDB2.1、下载解压安装包 3、创建主节点3.1、创建存储数据和日志的目录3.2、新建配置文件3.3、启动节点服务 4、创建副本节点4.1、创建存储数据和日志的目录4.2、新建配…

场景文本检测识别学习 day06(Vi-Transformer论文精读)

Vi-Transformer论文精读 在NLP领域&#xff0c;基于注意力的Transformer模型使用的非常广泛&#xff0c;但是在计算机视觉领域&#xff0c;注意力更多是和CNN一起使用&#xff0c;或者是单纯将CNN的卷积替换成注意力&#xff0c;但是整体的CNN 架构没有发生改变VIT说明&#x…

面试笔记——线程池

线程池的核心参数&#xff08;原理&#xff09; public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)corePoolSize …

2024年 Java 面试八股文——Redis篇

目录 1、介绍下Redis Redis有哪些数据类型 难度系数&#xff1a;⭐ 2、Redis提供了哪几种持久化方式 难度系数&#xff1a;⭐ 3、Redis为什么快 难度系数&#xff1a;⭐ 4、Redis为什么是单线程的 难度系数&#xff1a;⭐ 5、Redis服务器的的内存是多大…

RustGUI学习(iced)之小部件(三):如何使用下拉列表pick_list?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第三篇,主要讲述下拉列表pick_list部件的使用,会…

c#创建新项目

确保已安装.NET Core SDK。&#xff08;visual studio installer中可安装&#xff09; cmd中先引用到文件夹目录下。 mkdir MyConsoleApp MyConsoleApp是项目文件夹的名字。 mkdir 是一个命令行工具&#xff0c;用于在文件系统中创建新的目录&#xff08;文件夹&#xff09;…

【YOLO改进】换遍IoU损失函数之DIoU Loss(基于MMYOLO)

DIoU损失函数 论文链接&#xff1a;https://arxiv.org/pdf/1911.08287 DIoU损失函数&#xff08;Distance Intersection over Union Loss&#xff09;是一种在目标检测任务中常用的损失函数&#xff0c;用于优化边界框的位置。这种损失函数是IoU损失函数的改进版&#xff0c;…

windows驱动开发-电源状态(二)

Modern Standby这个特性其实很难准确的讲清楚&#xff0c;因为它是一个系统行为不是驱动功能行为&#xff0c;应用层、功能驱动、系统总线、设备本身都有不同程度的参与&#xff0c;并且它属于否决性的&#xff0c;一个系统中&#xff0c;只要有一个设备不支持Modern Standby&a…

新手如何用Postman做接口自动化测试?

1、什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来&#xff0c;本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已…

Q02UCPU 三菱Q系列通用型QnUCPU模块20K步40ns

Q02UCPU 三菱Q系列通用型QnUCPU模块20K步40ns Q02UCPU外部连接, Q02UCPU可以用Q03UDVCPU替换。 Q02UCPU参数说明&#xff1a;输入输出2048点、I/O软元件点数8192、程序容量20K、基本处理速度40ns、程序内存80K、USB/RS232连接。 Q02UCPU图片 三菱通用型QnUCPU模块20K步Q02UCPU…