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

Gitee仓库

https://gitee.com/Lin_DH/system

介绍

可扩展标记语言 (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 {
    @Override
    public 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 {

    @Resource
    private 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】

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

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

相关文章

重学SpringBoot3-集成Redis(十二)之点赞功能实现

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;十二&#xff09;之点赞功能实现 1. 点赞功能的场景分析2. 项目环境配置2.1. 依赖引入2.2. Redis 配置 3. 点赞功能的实现3.1. 点…

【R语言】gadm全球行政区划数据库

我R语言不熟、也不是学GIS的。仅用于记录。 文章目录 一、gadm 数据库简介二、R 语言示例三、sf 包的函数 一、gadm 数据库简介 GADM&#xff08;全称Database of Global Administrative Areas&#xff09;是一个高精度的全球行政区划数据库&#xff0c;它包含了全球所有国家和…

步步精科技诚邀您参加2024慕尼黑华南电子展

尊敬的客户&#xff1a; 我们诚挚地邀请您参加即将于2024年10月14日至10月16日在深圳国际会展中心 &#xff08;宝安新馆&#xff09;举办的慕尼黑华南电子展(electronica South China)。本届将聚焦人工智能、数据中心、新型储能、无线通信、硬件安全、新能源汽车、第三代半导…

ubuntu系统使用Linux版原生微信

背景 既想用ubuntu操作系统&#xff0c;又同时想使用微信&#xff0c;但是ubuntu默认的应用商店是不支持安装微信的 解决 本电脑安装的当前最新版本的ubuntu系统24.04.1TLS操作系统 使用终端命令行安装铜豌豆软件源。注意需要用到sudo权限。需要切换到root用户&#xff08;…

【C++标准模版库】unordered_map和unordered_set的介绍及使用

unordered_map和unordered_set 一.unordered_set1.unordered_set类的介绍2.unordered_set和set的使用差异 二.unordered_map1.unordered_map和map的使用差异 三.unordered_multimap/unordered_multiset四.unordered_map/unordered_set的哈希相关接口 一.unordered_set 1.unord…

C++入门基础知识116—【关于C++多维数组】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C多维数组的相关内容&#xff01; 关于【…

springboot将logback替换成log4j2

一 为何要替换成log4j2 1.1 log4j2的优点 log4j2使用了两种方式记录日志&#xff1a;AsyncAppender和AsyncLogger。 1.AsyncAppender使用队列异步记录日志&#xff0c;但是一旦队列已满&#xff0c;appender线程需要等待。2.AsyncLogger是采用Disruptor&#xff0c;通过环形…

Java毕业设计 基于SpringBoot发卡平台

Java毕业设计 基于SpringBoot发卡平台 这篇博文将介绍一个基于SpringBoot发卡平台&#xff0c;适合用于Java毕业设计。 功能介绍 首页 图片轮播 商品介绍 商品详情 提交订单 文章教程 文章详情 查询订单  查看订单卡密 客服   后台管理 登录 个人信息 修改密码 管…

基于SpringBoot的家政服务管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

HUAWEI_HCIA_实验指南_Lib2.1_交换机基础配置

1、原理概述 交换机之间通过以太网电接口对接时需要协商一些接口参数&#xff0c;比如速率、双工模式等。交换机的全双工是指交换机在发送数据的同时也能够接收数据&#xff0c;两者同时进行。就如平时打电话一样&#xff0c;说话的同时也能够听到对方的声音。而半双工指在同一…

msvcp100.dll丢失的修复方法,全面解读6个方法

在电脑使用过程中&#xff0c;我们经常会遇到各种各样的故障&#xff0c;其中&#xff0c;系统文件缺失是一种较为常见的问题。msvcp100.dll作为Windows操作系统中不可或缺的组件之一&#xff0c;其重要性不言而喻。本文将为您详细解读电脑缺失msvcp100.dll问题的原因、影响及解…

备考干货攻略 | 今年11月份PMP考试必看!5分钟带你了解考试秘诀!

PMP&#xff0c;全称Project Management Professional项目管理专业人士资格认证&#xff0c;由美国PMI(Project ManagementInstitute) 组织颁发证书。是目前全球项目管理方面含金量最高的资格认证&#xff0c;是项目管理专业人士身份的象征。 1999年由我国国家外国专家局引进&a…

改进 JavaScript 条件语句,探索可以替代 if...else 的 7 种方式!

当优化 JavaScript 代码时&#xff0c;条件语句是一个经常需要思考和改进的关键部分。if...else 结构虽然是我们常用的条件语句之一&#xff0c;但当代码逻辑变得复杂&#xff0c;if...else 结构可能会导致代码冗长、难以维护和理解。因此&#xff0c;了解并掌握优化 if...else…

力扣61~65题

题61&#xff08;中等&#xff09;&#xff1a; 分析&#xff1a; python代码&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def rot…

014_django基于大数据运城市二手房价数据可视化系统的设计与实现2024_3ahrxq75

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

Java爬虫:从入门到精通实战指南

在信息技术飞速发展的今天&#xff0c;数据已成为最宝贵的资源之一。Java作为一种成熟且功能强大的编程语言&#xff0c;不仅在企业级应用开发中占据主导地位&#xff0c;也成为了编写爬虫程序的理想选择。Java爬虫能够自动化地从网页或API中提取数据&#xff0c;为数据分析、机…

银河麒麟V10系统+Windows10双系统启动顺序正确修改方法

***正确可行方法***&#xff0c;测试OK且稳定&#xff1b; 银河麒麟桌面操作系统V10是一款适配国产软硬件平台并深入优化和创新的新一代图形化桌面操作系统&#xff0c;同源支持国内外主流处理器架构&#xff0c;并不断使能GPU、桥片、网卡等各种新硬件&#xff0c;提供更优的软…

精华帖分享 | 从华泰研报出发,开启人工智能炼丹篇章!

最近研究完邢大新发布的各种框架后&#xff0c;突然冒出了想当牛马的想法。但是&#xff0c;本人作为一个量化小白&#xff0c;从头开始到变成牛马那必定是道阻且长。于是我决定从彩虹几乎没有涉及到的角度入手&#xff1a;做人工智能深度学习系列。 那为什么要做这个系列呢&a…

【MySQL实战45讲8】事务到底是隔离还是不隔离

文章目录 前言案例“快照”在MVCC里是怎么工作的更新逻辑 前言 如果是可重复读隔离级别&#xff0c;事务T启动的时候会创建一个视图read-view&#xff0c;之后事务T执行期间&#xff0c;即使有其他事务修改了数据&#xff0c;事务T看到的仍然跟在启动时看到的一样。 但当一个…

Jmeter进行http接口测试

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 本文主要针对http接口进行测试&#xff0c;使用jmeter工具实现。 Jmeter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较…