【SpringBoot】13 XML格式的请求和响应

介绍

可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点。
日常开发中,经常会用到Json格式和Xml格式的请求和响应处理,那xml格式的应该如何处理呢?

实现原理

在 SpringBoot 中处理Http请求的视线是采用 Spring MVC,而在Spring MVC 中有一个消息转换器的概念,它主要负责处理各种不同格式的请求数据进行处理,并转换成对象,以提供更好的编程体验。
在 Spring MVC 中定义了 HttpMessageConverter 接口,抽象了消息转换器对类型的判断、对读写的判断与操作。
Http 请求的 Content-Type 有各种不同格式定义,如果要支持 xml 格式的消息转换,就要使用对应的转换器。Spring MVC 中默认采用 Jackson 实现的转换器 MappingJackson2XmlHttpMessageConverter。

代码实现

第一步:引入 xml 消息转换器
在 Spring Boot 应用中,只需要引入 jackson-dataformat-xml 依赖,应用会自动引入 MappingJackson2XmlHttpMessageConverter 的实现。

pom.xml

<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId>
</dependency>

在传统 Spring 应用中,通过配置加入对 xml 格式数据的消息转换实现

CustomMessageConverterConfig.java

@Configuration
public class CustomMessageConverterConfig extends WebMvcConfigurerAdapter {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();builder.indentOutput(true);converters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));}
}

第二步:定义对象与 xml 的关系

User.java

package com.lm.system.common;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.util.Date;/*** @Author: DuHaoLin* @Date: 2024/7/26*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@JacksonXmlRootElement(localName = "User")
public class User {@TableId(value = "id", type = IdType.INPUT)@JacksonXmlProperty(localName = "id")private Integer id; //自增长@JacksonXmlProperty(localName = "name")private String name;@JacksonXmlProperty(localName = "age")private Integer age;@JacksonXmlProperty(localName = "gender")private String gender; //性别@JacksonXmlProperty(localName = "deleted")private Integer deleted; //是否已经删除:0否,1是@JacksonXmlProperty(localName = "createTime")private Date createTime;@JacksonXmlProperty(localName = "updateTime")private Date updateTime;}

第三步:编写 controller 类

UserController.java

package com.lm.system.controller;import com.lm.system.common.User;import com.lm.system.service.UserService;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import java.util.List;/*** @Author: DuHaoLin* @Date: 2024/7/26*/
@RestController
@Api(tags = "用户接口")
@RequestMapping("user")
public class UserController {@Resourceprivate UserService userService;/*** 以xml的格式查询出用户数据*/@GetMapping(value = "xmlUsers", produces = MediaType.APPLICATION_XML_VALUE)public List<User> xmlUsers() {return userService.queryAllUser();}/*** 传入xml的格式id,查询出xml格式的用户数据*/@PostMapping(value = "queryXmlUserById", consumes = MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE)public User queryXmlUserById(@RequestBody User user) {return userService.queryUserById(user.getId());}}

效果图
1.查询数据库中所有用户数据,以xml格式呈现。
在这里插入图片描述
2.用Post方式传xml格式的id,查询对应的xml格式的用户数据。
在这里插入图片描述

项目结构图

在这里插入图片描述

参考资料

Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应【https://www.didispace.com/spring-boot-2/3-8-xml.html】

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OPC UA与PostgreSQL如何实现无缝连接?

随着工业4.0的推进&#xff0c;数据交换和集成在智能制造中扮演着越来越重要的角色。OPC UA能够实现设备与设备、设备与系统之间的高效数据交换。而PostgreSQL则是一种强大的开源关系型数据库管理系统&#xff0c;广泛应用于数据存储和管理。如何将OPC UA与PostgreSQL结合起来&…

【力扣刷题实战】合并两个有序链表

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 力扣题目&#xff1a;合并两个有序链表 题目描述 示例 1&#xff1a; 示例 2&#xff1a; 示例 3&#xff1a; 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码&#xff08;C语言&#xff09; 兄弟们共勉…

Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)

0x01 产品介绍&#xff1a; Palo Alto Networks Expedition 是一款强大的工具&#xff0c;帮助用户有效地迁移和优化网络安全策略&#xff0c;提升安全管理的效率和效果。它的自动化功能、策略分析和可视化报告使其在网络安全领域中成为一个重要的解决方案。 0x02 漏洞描述&am…

图像处理(二)——MDPI特刊推荐

特刊征稿 01 期刊名称&#xff1a; Computer Vision and Image Processing, 2nd Edition 截止时间&#xff1a; 投稿截止日期&#xff1a;2024年12月31日 目标及范围&#xff1a; 感兴趣的主题包括但不限于&#xff1a; 用于图像分类和识别的深度学习 对象检测和跟…

Chromium HTML5 <svg>对应c++接口说明

一、SVG&#xff1a;可缩放矢量图形 开始学习 SVG 可缩放矢量图形&#xff08;Scalable Vector Graphics&#xff0c;SVG&#xff09;基于 XML 标记语言&#xff0c;用于描述二维的矢量图形。 作为一个基于文本的开放网络标准&#xff0c;SVG 能够优雅而简洁地渲染不同大小的…

c高级10月15日

1&#xff0c;思维导图

鸿蒙版微信正式上架,国产化软件抱团进化多样化生态圈

微信鸿蒙版已经在2024年10月12日正式上架鸿蒙应用市场&#xff0c;并且开始公测。根据报道&#xff0c;上架后鸿蒙版微信的公测名额在很短的时间内就被抢光&#xff0c;显示出用户对于这款应用的极大热情。腾讯高管张军宣布&#xff0c;自10月12日起&#xff0c;每晚在鸿蒙应用…

3D Slicer 教程三 ---- 坐标系

上篇提到3D Slicer 教程二 ---- 数据集-CSDN博客 3d slicer的坐标系与大多数医学影像软件使用LPS&#xff08;左、后、上&#xff09;坐标系统不太一样, 今天就仔细介绍一下坐标系的区别,复盘一下在影像处理中遇到的坐标问题(集中在坐标处理相关的,图像插值,图像处理, 定位线,翻…

薪资管理系统原型PC端+移动端 Axure原型 交互设计 Axure实战项目

薪资管理系统原型PC端移动端 Salary Management System Prototype 薪资管理系统原型图是一种以图形化方式展示系统界面和功能交互的设计图形。该原型图旨在呈现薪资管理系统的整体架构、界面布局和用户交互流程&#xff0c;为开发团队和利益相关者提供一个清晰而具体的概念。…

安全生产玩手机检测系统 玩手机识别系统 玩手机监测预警系统 使用 Python 和 OpenCV 库实现

在生产作业过程中&#xff0c;员工玩手机是一种极其危险的行为。它会分散员工的注意力&#xff0c;使其无法专注于工作任务。生产现场往往存在各种潜在的危险因素&#xff0c;如机械设备的运转、高空作业、化学品的使用等&#xff0c;一旦员工分心&#xff0c;就很容易忽视这些…

mongodb-7.0.14分片副本集超详细部署

mongodb介绍&#xff1a; 是最常用的nosql数据库&#xff0c;在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb&#xff08;分片副本&#xff09;集群。 环境准备 系统系统 BC 21.10 三台服务器&#xff1a;192.168.123.247/248/249 安装包&#xff1a…

AI LLM 利器 Ollama 架构和对话处理流程解析

Ollama 概述 Ollama 是一个快速运行 LLM&#xff08;Large Language Models&#xff0c;大语言模型&#xff09;的简便工具。通过 Ollama&#xff0c;用户无需复杂的环境配置&#xff0c;即可轻松与大语言模型对话互动。 本文将解析 Ollama 的整体架构&#xff0c;并详细讲解…

FFmpeg的简单使用【Windows】

目录 一、视频生成图片 静态图片 转码过程 动态图片gif 二、图片生成视频 三、FFmpeg常用参数命令 3.1 主要参数 3.1.1、-i 3.1.2、-f 3.1.3、-ss 3.1.4、-t 3.2 音频参数 3.2.1、-aframes 3.2.2、 -b:a 3.2.3、-ar 3.2.4、-ac 3.2.5、-acodec 3.2.6、-an 3…

desmos和webgl绘制线条

目录 desmos绘制 webgl绘制 将线段坐标生成三角化坐标 处理斜接线段 处理圆角 尖角 先在desmos上面完成线条lineJoin绘制的,再将代码和公式转到js用webgl绘制. desmos绘制 示例 desmos计角斜接角时&#xff0c;需要用到的一些函数。在desmos定义成公共函数&#xff0c…

【全网最全】AI产品经理面试高频100题答案解析

详细的目录如下&#xff0c;需要的小伙伴可以详细看一下~ 第一章&#xff1a;机器学习和深度学习的关系 第二章&#xff1a;机器学习7大经典算法 算法一&#xff1a;K近邻算法【分类算法】 1.1 KNN 算法的实现原理 1.2 KNN应用场景举例&#xff1a;预测候选人能不能拿到 O…

心觉:激活潜意识财富密码:每天一练,财富自动来

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作200/1000天 为什么有些人总是轻而易举地吸引到财富 而你却努力多年仍然徘徊在财务的困境中&#xff1f; 你每天都在辛苦工作&…

LabVIEW离心泵监测系统

LabVIEW的离心泵监测系统在监测离心泵的运行状态&#xff0c;通过实时数据采集和故障预警&#xff0c;提高泵的运行效率和安全性。系统集成了多种传感器&#xff0c;利用Modbus RTU协议和RS485串口总线进行数据通信&#xff0c;通过LabVIEW软件平台实现数据处理和用户界面交互。…

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中&#xff0c;我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如&#xff0c;我们介绍了以下案例&#xff1a; Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…

Opencv:FisherFace算法实现人脸检测

目录 简介 实现步骤 1. 图像读取和预处理 2. 创建和训练识别器 3. 图像识别和结果展示 4、结果展示 总结 简介 在人工智能和计算机视觉领域&#xff0c;人脸识别是一项非常有趣且实用的技术。本文将向您介绍如何使用OpenCV库以及FisherFace算法实现人脸识别。我们将一步…

数据可视化-使用python制作词云图(附代码)

想象一下&#xff0c;当你写完一篇日记或者一篇文章后&#xff0c;想要知道里面哪些词语出现得最多。这时候&#xff0c;词云图就能派上用场了。它会统计出文章里每个词语出现的次数&#xff0c;然后把这些词语以不同大小的字体展示出来&#xff0c;出现次数越多的词语&#xf…