springboot使用jackson实现pojo和xml互相转换

springboot使用jackson实现pojo和xml互相转换

  • 一、引入maven包
  • 二、创建pojo
    • 1.Java对象转XML
    • 2.XML转Java对象

一、引入maven包

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

二、创建pojo

使用lombok快速创建

xml转换核心注解
@JacksonXmlElementWrapper:可以将列表数据转为XML节点。;
@JacksonXmlRootElement:指定生成xml根标签的名字;
@JacksonXmlProperty:指定包装标签名,或者指定标签内部属性名;
@JacksonXmlText:指定当前这个值,没有xml标签包裹。

package com.erfou.entity;

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;

@Data
@AllArgsConstructor
@NoArgsConstructor
@JacksonXmlRootElement(localName = "xml")
public class PaylinxCallBack {
    @JacksonXmlProperty(localName = "bank_type")
    private String bank_type;

    @JacksonXmlProperty(localName = "cash_fee")
    private String cash_fee;

    @JacksonXmlProperty(localName = "cash_fee_type")
    private String cash_fee_type;

    @JacksonXmlProperty(localName = "fee_type")
    private String fee_type;

    @JacksonXmlProperty(localName = "result_code")
    private String result_code;

    @JacksonXmlProperty(localName = "return_code")
    private String return_code;

    @JacksonXmlProperty(localName = "time_end")
    private String time_end;

    @JacksonXmlProperty(localName = "total_fee")
    private String total_fee;

    @JacksonXmlProperty(localName = "transaction_id")
    private String transaction_id;

    @JacksonXmlProperty(localName = "mch_id")
    private String mch_id;

    @JacksonXmlProperty(localName = "nonce_str")
    private String nonce_str;

    @JacksonXmlProperty(localName = "out_trade_no")
    private String out_trade_no;

    @JacksonXmlProperty(localName = "platform")
    private String platform;

    @JacksonXmlProperty(localName = "sign")
    private String sign;
}

1.Java对象转XML

使用XmlMapper 的writeValueAsString方法进行转换

    @GetMapping("/toxml")
    public void toXml(){
        PaylinxCallBack paylinxCallBack = new PaylinxCallBack();
        paylinxCallBack.setSign("963852741");
        XmlMapper xmlMapper = new XmlMapper();
        try {
            String xml = xmlMapper.writeValueAsString(paylinxCallBack);
            System.out.println(xml);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

转换结果

<xml>
	<bank_type/>
	<cash_fee/>
	<cash_fee_type/>
	<fee_type/>
	<result_code/
	><return_code/>
	<time_end/>
	<total_fee/>
	<transaction_id/>
	<mch_id/>
	<nonce_str/>
	<out_trade_no/>
	<platform/>
	<sign>963852741</sign>
</xml>

2.XML转Java对象

使用xmlMapper.readValue进行转化

 @GetMapping("/topojo")
    public void toPojo() throws IOException {
        String xml="\n" +
                "\n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "  \n" +
                "";
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.setDefaultUseWrapper(false);
        xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        PaylinxCallBack paylinxCallBack=xmlMapper.readValue(xml,PaylinxCallBack.class);
        System.out.println(paylinxCallBack.toString());
    }

结果

PaylinxCallBack(bank_type=CFT, cash_fee=3198, cash_fee_type=CNY, fee_type=AUD, result_code=SUCCESS, return_code=SUCCESS, time_end=20190218175517, total_fee=659, transaction_id=4200000268201902183412918770, mch_id=1234567, nonce_str=6saqecbgail2c08kgkgd1mrdfge8i6bb, out_trade_no=A1550523295, platform=wechat, sign=9E86F28A2C6536509A133DC085AD0203)

你可能感兴趣的:(java)