以前一直以为 Java Bean 和 XML 之间的转化只有不是很规范的 XStream 和 学起来很混乱, 用起来不方便的 JAXB(个人观点). 知道最近发现了 jackson 的 fasterxml. 简洁方便高效.
maven 依赖:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
GitHub地址: https://github.com/FasterXML/jackson-dataformat-xml
以下是 SpringBoot 里面使用示例. 其他使用详情, 参考GitHub.
package xxx;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
@Component
public class XmlUtil {
@Autowired
private MappingJackson2XmlHttpMessageConverter xmlConverter;
private ObjectMapper xmlMapper;
@PostConstruct
private void init() {
xmlMapper = xmlConverter.getObjectMapper();
}
@SneakyThrows
public String toXmlString(Object obj) {
if (obj == null) {
return "";
}
return xmlMapper.writeValueAsString(obj);
}
@SneakyThrows
public <T> T parseObject(String jsonStr, Class<T> clazz) {
if (jsonStr == null) {
return null;
}
return xmlMapper.readValue(jsonStr, clazz);
}
@SneakyThrows
public <T> T parseObject(String jsonStr, TypeReference<T> reference) {
if (jsonStr == null) {
return null;
}
return xmlMapper.readValue(jsonStr, reference);
}
}
比较常用的设置(解析大小写不敏感和正常忽略多余字段):
xmlMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);