@Slf4j
public class XmlUtil {
private static final XmlMapper XML_MAPPER;
static {
XML_MAPPER = new XmlMapper();
XML_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
public static String toXmlStr(Object object){
try {
return XML_MAPPER.writeValueAsString(object);
} catch (JsonProcessingException e) {
log.error("xml转化失败:{}",object);
throw new RuntimeException("xml转化失败");
}
}
public static <T> T toBean(String s, Class<T> tClass){
try {
String replace = s.replace("<", "<![CDATA[<]]>").replace(">", "<![CDATA[>]]>");
String s1 = StringEscapeUtils.unescapeHtml4(replace);
return XML_MAPPER.readValue(s1,tClass);
} catch (JsonProcessingException e) {
log.error("xml转对象失败:{}",s,e);
throw new RuntimeException(e);
}
}
public static <T> List<T> toList(String xml, Class<T> valueType) {
try {
String replace = xml.replace("<", "<![CDATA[<]]>").replace(">", "<![CDATA[>]]>");
String s1 = StringEscapeUtils.unescapeHtml4(replace);
return XML_MAPPER.readValue(s1, XML_MAPPER.getTypeFactory().constructCollectionType(List.class, valueType));
} catch (JsonProcessingException e) {
log.error("xml转list失败",e);
throw new RuntimeException(e);
}
}
}
翻译完后特殊字符用StringEscapeUtils类处理,转对象的时候为了防止<>括号导致xml报错,用
<![CDATA[内容]]>包起来