關於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相關的配置都在DeserializationFeature
和SerializationFeature
中,能夠根據須要酌情配置。ui
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