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);
}