package com.healerjean.proj.util.xml;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.healerjean.proj.util.xml.strategy.UpperCaseSnackNamingStrategy;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
@Slf4j
public class XmlUtils {
public static final XmlMapper xmlMapper;
static {
xmlMapper = new XmlMapper();
SimpleModule module = new SimpleModule();
xmlMapper.registerModule(module);
xmlMapper.setDefaultUseWrapper(false);
xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
xmlMapper.setPropertyNamingStrategy(new UpperCaseSnackNamingStrategy());
xmlMapper.enable(MapperFeature.USE_STD_BEAN_NAMING);
public static String toXml(Object object) {
try {
return xmlMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
log.error("Xml转换失败", e);
throw new RuntimeException("Xml转换失败", e);
public static <T> T toObject(String xml, Class<T> c) {
try {
return xmlMapper.readValue(xml, c);
} catch (IOException e) {
log.error("Xml转换失败", e);
throw new RuntimeException("Xml转换失败", e);
package com.healerjean.proj.util.xml.strategy;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
* @author HealerJean
* @version 1.0v
* @ClassName UpperCaseSnackNamingStrategy
* @Date 2019/10/29 22:48.
* @Description 转大写并加下划线
public class UpperCaseSnackNamingStrategy extends PropertyNamingStrategy.PropertyNamingStrategyBase {
@Override
public String translate(String input) {
if (input == null) {
return input;
int length = input.length();
StringBuilder result = new StringBuilder(length * 2);
int resultLength = 0;
boolean wasPrevTranslated = false;
for (int i = 0; i < length; i++) {
char c = input.charAt(i);
if (i > 0 || c != '_') {
if (Character.isUpperCase(c)) {
if (!wasPrevTranslated && resultLength > 0 && result.charAt(resultLength - 1) != '_') {
result.append('_');
resultLength++;
wasPrevTranslated = true;
} else {
wasPrevTranslated = false;
c = Character.toUpperCase(c);
result.append(c);
resultLength++;
return resultLength > 0 ? result.toString() : input;
感兴趣的,欢迎添加博主微信
哈,博主很乐意和各路好友交流,如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,备注您的微信或者其他联系方式。添加博主微信哦。
请下方留言吧。可与博主自由讨论哦