当前位置: 首页 > news >正文

springboot RestTemplate 发送xml、接收xml、pojo中的属性转为属性

背景

调用第三方接口时,它们的系统比较老,只支持接收xml而不支持json,默认的springboot RestTemplate不支持发送xml,添加依赖就可以解决这个问题。

添加jackson-dataformat-xml依赖

FasterXML/jackson-dataformat-xml是一个xml编、解码库。

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

这个版本号应该填什么呢?根据依赖关系spring-boot-starter-web---->spring-webmvc---->jackson-dataformat-xml,找到pom中的配置。

<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.9.8</version><scope>compile</scope><optional>true</optional></dependency>

顺便说一下,因为它是optional的,所以要引用。

RestTemplate发送xml

import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.HttpEntity;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_XML);
final URI uri = UriComponentsBuilder.fromUriString(“url”).build().toUri();
User user= new User();
HttpEntity<User> request = new HttpEntity<>(user, headers);
//响应是xml,也会自动转为POJO
final Result result= restTemplate.postForObject(uri,request , Result.class);

代码中的UserResult都是普通的POJO,发送时会自动的转换为xml,POJO中的属性会转换为xml中的节点,如果要转换为节点的属性,则在属性上添加@JacksonXmlProperty

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;@Data
public class User{/***指定为属性*/@JacksonXmlProperty(isAttribute = true)private String name;/*** 默认的是节点*/private BigDecimal money;
}

jackson-dataformat-xml常用的注解

jackson-dataformat-xml常用的几个注解有@JacksonXmlElementWrapper@JacksonXmlProperty@JacksonXmlRootElement@JacksonXmlText

  • @JacksonXmlElementWrapper
    • 用在集合元素上,可指定名称
  • @JacksonXmlProperty
    • 用在类的属性上,可以指定名称及属性转为节点or属性
  • @JacksonXmlRootElement
    • 指定根元素名称,用在类上
  • @JacksonXmlText
    • 转为xml后没有元素包裹,是个文本节点

更多信息可参考Jackson XML annotations,值得一提的是,对于集合属性,如果要同时指定容器容器内元素的名称,如下

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
@JacksonXmlElementWrapper(localName = "users") //容器的名称
@JacksonXmlProperty(localName = "user")//容器元素的名称
private List<User> users;
http://www.lryc.cn/news/319263.html

相关文章:

  • Lua-Lua与C++的交互2
  • 学python新手如何安装pycharm;python小白如何安装pycharm
  • Oracle Primavera P6 数据库升级
  • 共享库的创建gcc选项“-shared -fPIC -WI”
  • 微服务:Bot代码执行
  • Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 3、线条平滑曲面但有条纹
  • Vue.js+SpringBoot开发数字化社区网格管理系统
  • java SSM农产品订购网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
  • vsto快速在excel中查找某个字符串
  • Unity类银河恶魔城学习记录10-1 10-2 P89,90 Character stats - Stat script源代码
  • 西门子TIA中配置Anybus PROFINET IO Slave 模块
  • 在 Rust 中使用 Serde 处理json
  • 【数据库】数据库介绍
  • python 第三方库(PyPinyin\shortuuid\json)
  • 一文解读ISO26262安全标准:术语(二)
  • 【Datawhale学习笔记】从大模型到AgentScope
  • QWebEngineView添加自定义网址协议UrlScheme
  • react中使用腾讯地图
  • deepin23beta中SQLite3数据库安装与使用
  • 前后端分离项目环境搭建
  • HTML静态网页成品作业(HTML+CSS)——家乡漳州介绍设计制作(1个页面)
  • 世界第二对海信到底有多重要?
  • 多站合一的音乐搜索下载助手PHP源码l亲测
  • webserver烂大街?还有必要做么?
  • 3.Redis命令
  • xray问题排查,curl: (35) Encountered end of file(已解决)
  • 【数据库】Oracle内存结构与参数调优
  • PS学习-抠图-蒙版-冰块酒杯等透明物体
  • 绝赞春招拯救计划 -- 操作系统,组成原理,计网
  • c语言:于龙加