之前一直覺得 Java Bean 和 XML 之間的轉化只有不是很規範的 XStream 和 學起來很混亂, 用起來不方便的 JAXB(我的觀點). 知道最近發現了 jackson 的 fasterxml. 簡潔方便高效.java
maven 依賴:git
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency>
GitHub地址: https://github.com/FasterXML/jackson-dataformat-xmlgithub
如下是 SpringBoot 裏面使用示例. 其餘使用詳情, 參考GitHub.spring
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); } }
比較經常使用的設置(解析大小寫不敏感和正常忽略多餘字段):json
xmlMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);