关于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