SpringBoot使用Jackson序列化Json和XML

关于Json库,最近讨论的最多是阿里开源的FastJson,虽然令人尴尬的是讨论的主要内容是其频繁暴露的安全漏洞问题。FastJson漏洞影响范围之大主要原因是在其在国内非常火爆,而在国外Jackson是主流选择,FastJson在国内热门的原因可能是因为作者是国人,版本更新频繁且中文资料较多,另外还有一个比较讨巧的原因是FastJson常用的方法都设置成静态方法,对于简单的序列化反序列化可以直接使用,不需要实例化,也不需要进行配置。而Jackson的所有操作都要依靠ObjectMapper这个对象来完成,在使用前都需要进行如下操作:

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:

@Autowired
private ObjectMapper objectMapper;
复制代码

自定义配置

Jackson提供了非常多的额外配置,可以满足各种不同的需求和场景,可以自己配置一个新的ObjectMapper类型的Bean,并设置相关的属性:

@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
中,可以根据需要酌情配置。

使用Jackson序列化XML

Jackson不仅仅是一个Json库,并且还是一个Xml库,这也可以从其包名 com.fasterxml.jackson
看出来。与Json使用相同,Jackson对于XML的操作都依赖于XmlMapper的实例化对象,XmlMapper是ObjectMapper的子类:

public class XmlMapper extends ObjectMapper {
    ...
}
复制代码

很可惜, org.springframework.boot.autoconfigure
并未提供XmlMapper的自动配置,需要我们手动定义一个配置类:

@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,这点使用时还是要区分一下。

原文 

https://juejin.im/post/5f03e0345188252e3a45d028

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » SpringBoot使用Jackson序列化Json和XML

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址