SpringBoot使用Jackson序列化Json和XML

關於Json庫,最近討論的最可能是阿里開源的FastJson,雖然使人尷尬的是討論的主要內容是其頻繁暴露的安全漏洞問題。FastJson漏洞影響範圍之大主要緣由是在其在國內很是火爆,而在國外Jackson是主流選擇,FastJson在國內熱門的緣由多是由於做者是國人,版本更新頻繁且中文資料較多,另外還有一個比較討巧的緣由是FastJson經常使用的方法都設置成靜態方法,對於簡單的序列化反序列化能夠直接使用,不須要實例化,也不須要進行配置。而Jackson的全部操做都要依靠ObjectMapper這個對象來完成,在使用前都須要進行以下操做:spring

ObjectMapper mapper = new ObjectMapper();
mapper.xxxx
複製代碼

前面說了這麼多廢話其實就是想說,對於新手來講Jackson使用起來仍是稍微麻煩一點。安全

簡單使用

Jackson是SpringBoot官方推薦的Json庫,從SpringBoot1.2.0開始SpringBoot爲其提供了自動配置,在org.springframework.boot.autoconfigure.jackson包下面能夠看到Jackson的自動配置類JacksonAutoConfiguration,當配置文件中存在"spring.jackson"爲前綴的配置後會向Spring容器注入一個ObjectMapper類型的Bean,若是開發時不須要特殊配置能夠直接使用這個Bean:bash

@Autowired
private ObjectMapper objectMapper;
複製代碼

自定義配置

Jackson提供了很是多的額外配置,能夠知足各類不一樣的需求和場景,能夠本身配置一個新的ObjectMapper類型的Bean,並設置相關的屬性:app

@Configuration
public class JSONConverterConfig {    
    @Bean(name = "objectMapper")    
    public ObjectMapper jacksonJsonMapper() {        
        ObjectMapper mapper = new ObjectMapper();        
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);       
        return mapper;   
        }
}
複製代碼

上述代碼就是配置了一個ObjectMapper的Bean,而且配置了屬性FAIL_ON_UNKNOWN_PROPERTIES,對於Json中出現的未知屬性不會拋出異常而是忽略。Jackson相關的配置都在DeserializationFeatureSerializationFeature中,能夠根據須要酌情配置。ui

使用Jackson序列化XML

Jackson不單單是一個Json庫,而且仍是一個Xml庫,這也能夠從其包名com.fasterxml.jackson看出來。與Json使用相同,Jackson對於XML的操做都依賴於XmlMapper的實例化對象,XmlMapper是ObjectMapper的子類:spa

public class XmlMapper extends ObjectMapper {
    ...
}
複製代碼

很惋惜,org.springframework.boot.autoconfigure並未提供XmlMapper的自動配置,須要咱們手動定義一個配置類:code

@Configuration
public class XmlConverterConfig {    
    @Bean(name = "xmlMapper")    
    public XmlMapper jacksonXmlMapper() {        
        XmlMapper mapper = new XmlMapper();        
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);        
        return mapper;    
        }
}
複製代碼

因爲XmlMapper和ObjectMapper的繼承關係,若是僅僅配置了XmlMapper Bean,在程序中也是能夠直接使用ObjectMapper的Bean進行操做,不過對象會被序列成XML而不是指望的Json,這點使用時仍是要區分一下。xml

相關文章
相關標籤/搜索