java 用 jackson 进行 xml bean 互转

本文介绍如何使用Jackson库实现XML文件与JavaBean之间的相互转换,并提供了Maven依赖及工具类示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xml和bean互转

maven 依赖包

    <properties>
        <json-version>2.4.2</json-version>
    </properties>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${json-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${json-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${json-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>${json-version}</version>
        </dependency>

jackson xmlMapper 对象

package com.tqmall.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

/**
 *
 * @author yibo.liu
 */
public class JacksonMapper {
    /**
     * can reuse, share globally
     */
    private static final ObjectMapper object = new ObjectMapper();

    /**
     * can reuse, share globally
     */
    private static final XmlMapper xml = new XmlMapper();

    /**
     * private constructor
     */
    private JacksonMapper() {
    }

    /**
     * return a ObjectMapper that is singleton
     * @return
     */
    public static ObjectMapper getObjectMapper() {
        return object;
    }

    /**
     * return a XmlMapper that is singleton
     * @return
     */
    public static XmlMapper getXmlMapper() {
        return xml;
    }
}

转换工具类

package com.tqmall.elasticsearch.nindex.writer.slaveproxy;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * 通用方法,用于转换xml到bean,或者bean 到xml
 * @author yibo.liu
 */
public class JacksonUtils {

    public static void main(String[] args) throws IOException {
        new SlaveIndexXmlParser().parse();
    }

    /**
     * XML To Object
     *
     * @param xmlPath
     * @param cls
     * @param <T>
     * @return
     * @throws IOException
     */
    public static <T> T xmlToBean(String xmlPath, Class<T> cls) throws IOException {
        XmlMapper xml = JacksonMapper.getXmlMapper();
        T obj = xml.readValue(new File(xmlPath), cls);
        return obj;
    }

    /**
     * @param xmlFile
     * @param cls
     * @param <T>
     * @return
     * @throws IOException
     */
    public static <T> T xmlToBean(File xmlFile, Class<T> cls) throws IOException {
        XmlMapper xml = JacksonMapper.getXmlMapper();
        T obj = xml.readValue(xmlFile, cls);
        return obj;
    }

    /**
     * @param xmlInputStream
     * @param cls
     * @param <T>
     * @return
     * @throws IOException
     */
    public static <T> T xmlToBean(InputStream xmlInputStream, Class<T> cls) throws IOException {
        XmlMapper xml = JacksonMapper.getXmlMapper();
        T obj = xml.readValue(xmlInputStream, cls);
        return obj;
    }

    public static <T> String beanToXml(T bean) throws JsonProcessingException {
        XmlMapper xml = JacksonMapper.getXmlMapper();
        String string = xml.writeValueAsString(bean);
        return string;
    }
}

xml文档结构定义:

这一部分不是重点。只是简单描述。
1. 扩展为 .xsd 的文件为 XML Schemas Definition ,所以我们需要先定义这个文件。(在项目中可以直接套用spring maven 等包的定义,改成自己的)
2. xmlns:xs=”http://www.w3.org/2001/XMLSchema” 中 xmlns 是 xml namespace ,即命名空间, :xs 是别名定义,如果有引用多个,用于区分不同的命名空间,避免命令冲突。而引号里面的,就是xml定义文档了。这个是网际网路联盟(World Wide Web Consortium,简称W3C)的定义,也就是定义 xsd 文档 的定义。
3. targetNamespace=”http://www.tqmall.com/search/slave/0.0.1” xmlns=”http://www.tqmall.com/search/slave/0.0.1” 这两个中,targetNamespace是定义这个文档的命名空间,也就是你定义的这个文档,而后面那个就是直接引用了自己,干什么用的,不清楚。
4. 然后,在使用上面定义的xsd的xml里面
- xmlns=”http://www.tqmall.com/search/slave/0.0.1”
- xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
- xsi:schemaLocation=”http://www.tqmall.com/search/slave/0.0.1
- http://www.tqmall.com/search/slave/slave-0.0.1.xsd
- xsi:schemaLocation 是用来导入需要用到的 xsd 定义文件,必需。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值