使用XStream实现Java对象与XML互相转换(不断更新中)

2023-11-11

添加pom依赖

<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.15</version>
</dependency>

工具类代码

package com.yongen.org;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

/**
 * @author yongen
 * @description: 使用XStream实现Java对象与XML互相转换
 * @date 2021/5/18 3:29 下午
 */
public class XmlUtils {

    /**
     * XML转对象  单一节点
     * @param clazz 对象类
     * @param xml   xml字符串
     * @return <T>  对象类
     */
    public static <T> T parseFromXml(Class<T> clazz, String xml) {
        XStream xStream = new XStream();
        //设置别名, 默认会输出全路径,这里设置为类名小写
        xStream.alias(clazz.getSimpleName().toLowerCase(), clazz);
        //解决xStream:Security framework of XStream not initialized, XStream is probably vulnerable
        XStream.setupDefaultSecurity(xStream);
        xStream.allowTypes(new Class[]{clazz});
        //将XML字符串转为bean对象
        try{
            return (T) xStream.fromXML(xml.trim());
        }catch (Exception e){
            return null;
        }
    }

    /**
     * 对象转XML 单一节点
     * @param obj 对象
     * @return xml xml字符串
     */
    public static <T> String toXml(T obj, Class<T> clazz) {
        //创建解析XML对象
        XStream xStream = new XStream();
        //设置别名, 默认会输出全路径,这里设置为类名小写
        xStream.alias(clazz.getSimpleName().toLowerCase(), clazz);
        try{
            return xStream.toXML(obj);
        }catch (Exception e){
            return null;
        }
    }


    /**
     * XML转对象(基于注解的形式) 单一节点
     * @param clazz 对象类
     * @param xml   xml字符串
     * @return <T>  对象类
     */
    public static <T> T parseFromXmlAnnotations(Class<T> clazz, String xml) {
        //创建解析XML对象
        XStream xStream = new XStream(new DomDriver());
        //处理注解
        xStream.processAnnotations(clazz);
        //解决xStream:Security framework of XStream not initialized, XStream is probably vulnerable
        XStream.setupDefaultSecurity(xStream);
        xStream.allowTypes(new Class[]{clazz});
        //将XML字符串转为bean对象
        try{
            return (T) xStream.fromXML(xml.trim());
        }catch (Exception e){
            return null;
        }
    }

    /**
     * 对象转XML(基于注解的形式) 单一节点
     * @param obj 对象
     * @return xml xml字符串
     */
    public static String toXmlAnnotations(Object obj) {
        XStream xStream = new XStream(new DomDriver());
        xStream.processAnnotations(obj.getClass());
        try{
            return xStream.toXML(obj);
        }catch (Exception e){
            return null;
        }
    }


}

示例代码

新建一个Java对象

public class User {

    private String userName;

    private String email;

    public User() {}

     public User(String userName, String email) {
        this.userName = userName;
        this.email = email;
    }

    public String toString() {
        return "User:{userName=" + this.userName + ",email=" + this.email + "}";
    }

    //Getter and Setter...
}

如果使用注解

@XStreamAlias("user")
public class User {

    @XStreamAlias("username")
    private String userName;

    @XStreamAlias("email")
    
    private String email;

    public User() {}

     public User(String userName, String email) {
        this.userName = userName;
        this.email = email;
    }

    public String toString() {
        return "User:{userName=" + this.userName + ",email=" + this.email + "}";
    }

    //Getter and Setter...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用XStream实现Java对象与XML互相转换(不断更新中) 的相关文章

  • java 拖放

    我尝试熟悉java中的拖放 但我发现的所有教程都是 让我生气 我想要的只是从 JList 包含在名为 UserPanel 的自制 JPanel 中 拖动 PublicUserLabel 并将其放入从 JTabbedPanel 继承的自制类中
  • Java 错误和警告列表

    在哪里 如何获得所有 java 和 javac 的错误和警告消息的列表 This http mindprod com jgloss compileerrormessages html我认为页面是您所需要的
  • 二元运算符 >=、-、* 的错误操作数类型

    我无法弄清楚如何修复代码中不断出现的这些错误 import java util Scanner public class Unit02Prog1 public static void main String args Scanner inp
  • Android Studio 与 Google Play 服务的编译问题

    我正在运行 Android Studio 0 8 4 并在 Android Studio 0 8 2 上尝试过此操作 我正在运行 Java JDK 1 8 0 11 并尝试使用 JDK 1 8 0 05 每当我尝试构建我的 android
  • Jenkins 未显示 Maven 编译器错误

    在 Jenkins 中构建多模块 maven 3 项目时 如果出现构建错误 我们会收到一条神秘消息 表明 Maven 编译器插件失败 这在上周才刚刚开始发生 INFO BUILD FAILURE INFO INFO Total time 1
  • Java:一种将 Mime(内容)类型与 CommonsMultipartFile 中的文件扩展名相匹配的方法

    在我的公司 出于额外原因 我需要将 mime 类型与文件扩展名进行比较 我有一个CommonsMultipartFile 我正在尝试找出进行这种比较的最佳方法 我见过一个MimetypesFileTypeMap 但不确定这是否适用于此 我试
  • 当前平台不支持桌面 API

    我遇到过这个错误 java lang UnsupportedOperationException 当前平台不支持桌面 API 我将从我的 java 应用程序中打开一个文件 我用这个方法 Desktop getDesktop open new
  • 使用 https 的 Web 服务身份验证给出错误

    我编写了一个简单的 Web 服务 并使用摘要和 HTTPS 身份验证来保护它 我已经使用 Java 中的 keytool 生成了我的证书 当我通过创建 war 文件在 Tomcat 中部署 Web 服务时 axis 的欢迎页面正确显示 但是
  • 是否可以使用 Apache Tika 提取表信息?

    我正在寻找 pdf 和 MS Office 文档格式的解析器 以从文件中提取表格信息 当我看到 Apache Tika 时 正在考虑编写单独的实现 我能够从任何这些文件格式中提取全文 但我的要求是提取表格数据 我希望有 2 列采用键值格式
  • 是否可以创建 Java RAM 磁盘以与 java.io.* API 一起使用?

    我正在使用一个第三方库 它基本上创建一个输出目录 其中包含不同类型的文件和子目录 我希望能够编写单元测试来确认输出正确 我希望能够将库与 RAM 磁盘一起使用 这样库所做的任何事情都不会以任何方式接触实际的磁盘板 这个想法是让测试运行和清理
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • java绕中心旋转矩形

    我想围绕其中心点旋转一个矩形 它应该保留在应该绘制的位置并在该空间中旋转 这是我的代码 AffineTransform transform new AffineTransform transform rotate Math toRadian
  • 为休息服务实施 JUnit 测试

    我必须为我的休息服务实现一些 JUnit 测试 例如 这是我的休息服务之一 Path dni fe public class HelloWorld POST Path home Consumes MediaType APPLICATION
  • Hybris:如何在impex中导入zip文件中的媒体?

    我知道我们可以导入未像这样压缩的图像 siteResource jar com project initialdata constants ProjectInitialDataConstants projectinitialdata imp
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • 向Java类库添加函数

    我使用的 Java 类库在很多方面都不完整 有很多类我认为应该内置其他成员函数 但是 我不确定添加这些成员函数的最佳实践 让我们调用不足的基类A class A public A long arbitrary arguments publi
  • 如何在一次操作中使用 Thymeleaf 检查 null 和空条件?

    有什么方法可以检查 Thymeleaf 中的 null 和empty 条件吗 方法一 1 variable1 variable2 variable3 2 variable null 3 variable 如果我们结合两个条件 例如 vari
  • log4j.properties 在 Wildfly 上无法正常工作

    我的类路径中有一个 log4j properties 文件 它位于 APP XX jar log4j properties 位置 我注意到在ear文件中我还可以在lib文件夹中找到log4j 1 2 17 jar 但无论我在 log4j p
  • 用于生成 ISO 文件的 Maven 插件

    有没有可以生成ISO镜像的maven插件 我需要获取一些模块的输出 主要是包含 jar 的 zip 文件 并将它们组合成一个 ISO 映像 Thanks 现在有一个 ISO9660 maven 插件可以完成这项工作 https github
  • Graphics2D setfont() 严重减慢了 java 应用程序的启动速度

    我正在用java制作一个游戏 它每秒刷新60次 每次执行循环时 我都会使用 g2d 来绘制图像和字符串 如果我这样做的话一切都会很好g2d setFont new Font Arial Font PLAIN 8 和抽绳 这将是正常的 但如果

随机推荐

  • 基于SpringBoot开发的停车位管理系统(调用百度地图api)

    文章目录 项目介绍 主要功能截图 前台 后台 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 基于SpringB
  • spring security免登录动态配置方案2

    序 之前有篇文章讲了怎么进行免登录动态配置的方案 动用了反射去实现 有点黑魔法的味道 这里再介绍另外一种方案 permitAll spring security config 4 2 3 RELEASE sources jar org sp
  • 巴菲特致股东的一封信:2011年

    原文请参考 http www berkshirehathaway com letters 2014ltr pdf 学习心得 全文如下 致伯克希尔哈萨维的股东 2011年我们的A股和B股每股账面价值增长了4 6 在过去47年 即现任管理层就职
  • C语言指针

    1 指针的概念 C程序中变量的值都是存储在计算机内存特定的储存单元中的 内存中的每个单元都有唯一的的地址 就像街区中的房子都有唯一的地址 宾馆中的房间都有唯一的编号一样 那么如何获取这个地址呢 这就要用到取地址运算符 即 计算机把整个内存条
  • Unity的C#编程教程_39_循环语句挑战:计数程序

    设计一个累计程序 每3秒钟计数 1 达到一个随机生成的上限时 累计停止 方法一 using System Collections using System Collections Generic using UnityEngine publ
  • 基于STM32的0.96寸OLED屏滚动显示长字符

    文章目录 一 OLED屏的滚屏命令 1 1 禁用滚动 2Eh 1 2 启用滚动 2Fh 1 3 设置水平左右滚动 1 4 设置垂直和水平滚动 二 使用OLED屏滚动显示长字符 1 对显示文字进行取模 2 main函数 3 显示长字符函数 4
  • Vue3头像(Avatar)

    效果如下图 在线预览 APIs 参数 说明 类型 默认值 必传 shape 指定头像的形状 circle square circle false size 设置头像的大小 number large small default Respons
  • 在Django4.03中使用自带的Admin管理后台创建部门表和员工表

    这两天 想帮公司搞个简单的员工管理系统 折腾了两天 查了很多方法 也走了很多弯路 本身自己学艺不精 不过还好 也折腾出来了 现在发表一下 自己的源码和遇到的坑 希望能帮助大家 一 先放源码 djangoProject3 settings p
  • 安卓抓包神器黄鸟HttpCanary安装配置及使用教程

    1 下载安装包 黄鸟抓包下载地址 2 安装下载的apk 3 证书安装问题 vivo手机我安装时打开黄鸟app 会直接弹出 直接安装即可 其他手机 需要去系统设置中安装 3 1 搜索 证书 选择CA证书 3 2 进行本人操作验证 3 3 安装
  • 常见指令及权限理解

    VMware 用来安装虚拟机的软件 在电脑上虚拟出一套计算机硬件环境 CentOS 操作系统 虚拟机 Linux 操作系统内核 Xshell 远程操作软件 可以远程操作linux主机 服务器 在XShell和直接在VMware终端写代码是一
  • 链塔智库

    目录 一 各地政策要闻 宁夏 推广区块链等技术实现数字化转型 宁波 前瞻性布局区块链等未来产业 重庆 区块链等新一代信息技术产业占全市软件业务收入总额近两成 云南 积极探索区块链等新技术在药品安全事前事中事后监管应用 广西 充分发挥跨境金融
  • cpp: Prototype Pattern

    Gold h 此文件包含 Gold 类 原型模式 Prototype Pattern C 14 2023年5月1日 涂聚文 Geovin Du Visual Studio 2022 edit pragma once ifndef GOLD
  • 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    分析 兔子的对数从第一月开始 1 1 2 3 5 8 规则 从第三月开始 每月的对数是前两月之和 题目问每个月的兔子总数 为更好理解 在此指定具体月数 改为求第20月的兔子总数 本题分别运用三种的方法实现 数组实现 用变量的变化实现 递归实
  • windows上删除不了文件

    遇到文件或者文件夹无法删除或者移动 其实本质是因为有应用或者其他软件在打开它 所以会导致我们无法更改他的位置 解决这个的办法就是把相应的软件关闭掉 把文件释放出来 然后我们就可以正常移动或者删除了 方法 步骤 遇到问题的情况 文件被使用无法
  • MySQL数据库总结 之 函数命令总结

    MySQL命令语句中的函数包含四种 字符串函数 数值函数 日期函数 流程函数 前两篇关于MySQL的博客 地址如下 MySQL数据库 SQL语言命令总结 数据类型 运算符和聚合函数汇总 Flying Bulldog的博客 CSDN博客htt
  • (附源码)计算机毕业设计SSM疫情隔离便民系统

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • 字符串中找出连续最长数字串(两种题型)--C++

    题目描述一 读入一个字符串str 输出字符串str中的连续最长的数字串 输入描述 个测试输入包含1个测试用例 一个字符串str 长度不超过255 输出描述 在一行内输出str中里连续最长的数字串 输入 abcd12345ed125ss123
  • 安装xposed(解决xposed问题)

    科学上网可轻松解决本文的问题 经过测试leidian mumu yeshen三个模拟器的最新版本只有leidian安装完成后可以重启 其他两个均会卡99 模拟器再起不能 MuMu模拟器win版 版本 2 1 3 可以 安装xposed前需关
  • 面试必备—MySQL中数据查询语句

    一 基本概念 查询语句 基本语句 1 select from 表名 可查询表中全部数据 2 select 字段名 from 表名 可查询表中指定字段的数据 3 select distinct 字段名 from 表名 可对表中数据进行去重查询
  • 使用XStream实现Java对象与XML互相转换(不断更新中)

    添加pom依赖