JAXB生成带<![CDATA[]]的xml

You can nearly always enjoy something, if you make up your mind firmly that you will. 只要你下决心去做某件事,总能从中找到乐趣。

1、JAXB Annotation 注解
  • @XmlRootElement // xml 文件的根元素
  • @XmlElement
  • @XmlAccessorType // 控制默认情况下是否对字段或 Javabean 属性进行系列化。
  • @XmlTransient
  • @XmlJavaTypeAdaptor:参考Using JAXB 2.0
2、bean简单示例
import javax.xml.bind.annotation.*;

@XmlRootElement(name = "request")
public class YDCreateTemplateRequest {

    /**
     * 模板名称, 长度上限30
     */
    @XmlElement
    private String templateName;

    /**
     * 短信内容
     */
    @XmlElement
    private String smsTemplate;

    /**
     * 模板内容类型, 1-文本, 2-多媒体, 3-卡片
     */
    @XmlElement
    private String contentType;

    /**
     * 模板内容。 使用JSON格式, 填写contents和suggestions。
     */
    @XmlElement
    private String bodyTextTemplate;

    /**
     * 是否提交审核, 缺省false
     */
    @XmlElement
    private String submit = "true";

    /**
     * 回落up1.0内容, 参考示例和回落内容说明
     */
    @XmlElement
    private String fallbackTemplate;

    @XmlTransient
    public String getTemplateName() {
        return templateName;
    }

    public void setTemplateName(String templateName) {
        this.templateName = templateName;
    }
    @XmlTransient
    public String getSmsTemplate() {
        return smsTemplate;
    }

    public void setSmsTemplate(String smsTemplate) {
        this.smsTemplate = smsTemplate;
    }
    @XmlTransient
    public String getContentType() {
        return contentType;
    }

    public void setContentType(String contentType) {
        this.contentType = contentType;
    }
    @XmlTransient
    public String getBodyTextTemplate() {
        return bodyTextTemplate;
    }

    public void setBodyTextTemplate(String bodyTextTemplate) {
        this.bodyTextTemplate = bodyTextTemplate;
    }
    @XmlTransient
    public String getSubmit() {
        return submit;
    }

    public void setSubmit(String submit) {
        this.submit = submit;
    }
    @XmlTransient
    public String getFallbackTemplate() {
        return fallbackTemplate;
    }

    public void setFallbackTemplate(String fallbackTemplate) {
        this.fallbackTemplate = fallbackTemplate;
    }
}
3、<![CDATA[]]包装
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.transform.sax.SAXResult;
import java.io.ByteArrayOutputStream;

public class XmlGeneratorUtil {


    /**
     *
     * @param clazz obj的class
     * @param obj obj
     * @param cDataElements 格式:String[] cData = new String[]{"^bodyTextTemplate","^fallbackTemplate"};
     * @return
     * @throws Exception
     */
    public static String objectToXmlWithCDATA(Class clazz, Object obj, String[] cDataElements) throws Exception {

        JAXBContext context = JAXBContext.newInstance(clazz);
        // configure an OutputFormat to handle CDATA
        OutputFormat of = new OutputFormat();
        of.setCDataElements(cDataElements); //

        // set any other options you'd like
        of.setPreserveSpace(true);
        of.setIndenting(true);
        // create the serializer
        ByteArrayOutputStream op = new ByteArrayOutputStream();
        XMLSerializer serializer = new XMLSerializer(op, of);
        SAXResult result = new SAXResult(serializer.asContentHandler());
        Marshaller mar = context.createMarshaller();
        mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        mar.marshal(obj, result);

        return op.toString("utf-8");
    }
}
4、测试
@Test
    public void bean2XmlTest() throws Exception {


        YDCreateTemplateRequest yd = new YDCreateTemplateRequest();

        yd.setTemplateName("模板名称测试");
        yd.setContentType("1");

        Map<String, Object> bodyTextTemplate = new HashMap<>();
        bodyTextTemplate.put("contentType", 1);
        bodyTextTemplate.put("text", "中秋快乐");
        Map<String, Object> contents = new HashMap<>();
        contents.put("contents", bodyTextTemplate);
        yd.setBodyTextTemplate(JSONUtil.toJsonStr(contents));

        yd.setSmsTemplate("中秋快乐");
        yd.setSubmit("true");

        String[] cDatas = new String[]{"^bodyTextTemplate", "^fallbackTemplate"};

        String ojbectToXmlWithCDATA = XmlGeneratorUtil.objectToXmlWithCDATA(YDCreateTemplateRequest.class, yd, cDatas);
        System.out.println(ojbectToXmlWithCDATA);
    }
5、参考

参考: https://javaee.github.io/jaxb-v2/doc JAXB 详解及实例分析

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 JAXBJava Architecture for XML Binding)来根据Java对象生成XML文件。下面是一个简单的示例: 首先,需要在Maven或Gradle中添加以下依赖项: ```xml <!-- Maven dependencies --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.0</version> </dependency> <!-- Gradle dependencies --> implementation 'javax.xml.bind:jaxb-api:2.3.0' implementation 'com.sun.xml.bind:jaxb-core:2.3.0' implementation 'com.sun.xml.bind:jaxb-impl:2.3.0' ``` 然后,创建一个Java类,并使用JAXB注解将其与XML元素相关联。例如: ```java @XmlRootElement public class Person { @XmlElement public String name; @XmlElement public int age; } ``` 接下来,编写代码以将Java对象转换为XML文件: ```java public static void main(String[] args) throws JAXBException { Person person = new Person(); person.name = "Alice"; person.age = 30; JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(person, new File("person.xml")); } ``` 上述代码会生成一个名为“person.xml”的文件,内容如下: ```xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <person> <name>Alice</name> <age>30</age> </person> ``` 希望这可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值