Jackson序列化实例

简介:

v 参考文章

      Jackson使用ContextualSerializer在序列化时获取字段注解的属性

      使用BeanSerializerModifier定制jackson的自定义序列化(null值的处理)

 

v关于使用ContextualSerializer的补充

  

   BeanSerializerFactory中有如下代码,

  

   

v关于设置SerializerModifier,如下

   

 

   

 

v两种实现序列化的方式

v  方式1:自定义json serialize 实现ContextualSerializer接口

  1. bo中自定义@ReferSerialTransfer注解

  

  2. 自定义注解 ReferSerialTransfer.java

  

  3. 自定义 json serialize实现

  

  4. springmvc 配置文件中 converter的配置

复制代码
<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8" />
            <property name="writeAcceptCharset" value="false" />
        </bean>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="prettyPrint" value="true" />
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>
复制代码

  

v  方式2:设置MappingJackson2HttpMessageConverter 对应的SerializerFactory 的SerializerModifier

  1.bo中serializer注解(JsonSerializer)

  

 

  2. springmvc配置文件中的converter配置

复制代码
<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8" />
            <property name="writeAcceptCharset" value="false" />
        </bean>
        <bean  factory-bean="mappingJackson2HttpMessageConverterFactory" factory-method="init"
              class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
             <property name="prettyPrint" value="true" />
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

<bean id="mappingJackson2HttpMessageConverterFactory"  class="com.hjz.refer.utils.MappingJackson2HttpMessageConverterFactory"/>
复制代码

  3. MappingJackson2HttpMessageConverterFactory.java

  

  4. 自定义BeanSerializerModifier.java

  

v Jackson序列化实例

  是这样的一个场景, 人员person和用户user进行1对1关联时,一般是 person中维护着user的id,或user中维护着person的id。前端展示的时候需要展示人员以及关联用户的(code 和 name),最简单暴力的做法就是根据person id 拿到person对象,再根据person中的user id,拿到user对象,最后重新组装一下数据。

  试想一下这个思路,项目启动时,把user的数据id <=> {id, code, name}同步到缓存中,在序列化 person 对象中 user id时做一点儿手脚,根据 user id 去缓存(如果缓存没有,则查询数据库)中拿到 对应的{id, code, name},并序列化该结果。从而达到了 id 转 {id, code, name}的效果。

  写了一个测试工程,目录结构如下。

  










本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/6594320.html,如需转载请自行联系原作者
目录
相关文章
|
消息中间件 存储 负载均衡
Kafka【付诸实践 01】生产者发送消息的过程描述及设计+创建生产者并发送消息(同步、异步)+自定义分区器+自定义序列化器+生产者其他属性说明(实例源码粘贴可用)【一篇学会使用Kafka生产者】
【2月更文挑战第21天】Kafka【付诸实践 01】生产者发送消息的过程描述及设计+创建生产者并发送消息(同步、异步)+自定义分区器+自定义序列化器+生产者其他属性说明(实例源码粘贴可用)【一篇学会使用Kafka生产者】
705 4
|
JSON 安全 编译器
扩展类实例的序列化和反序列化
扩展类实例的序列化和反序列化
133 1
|
JSON Java API
jackson序列化和反序列化中的注解和扩展点大全【收藏】
jackson序列化和反序列化中的注解和扩展点大全【收藏】
|
NoSQL Redis
redis使用jackson序列化数据配置文件
redis使用jackson序列化数据配置文件
225 5
springboot解决jackson序列化Long类型精度失效问题
springboot解决jackson序列化Long类型精度失效问题
343 0
|
前端开发 数据库
jackson序列化时区问题
jackson序列化时区问题
336 1
jackson序列化时区问题
|
JSON Java Maven
使用Jackson进行 JSON 序列化和反序列化
使用Jackson进行 JSON 序列化和反序列化
384 0
|
网络安全 PHP
[网络安全/CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)
[网络安全/CTF] BUUCTF极客大挑战2019PHP解题详析(Dirsearch使用实例+php反序列化)
495 0
|
JSON Java 数据格式
Jackson对象 ObjectMapper实现序列化数据为json
Jackson对象 ObjectMapper实现序列化数据为json
|
5月前
|
存储 安全 IDE
说一说序列化与反序列化中存在的问题
本文详细解析了Java中的序列化机制,包括序列化的概念、实现方式及应用场景。通过Student类的实例演示了对象的序列化与反序列化过程,并分析了`Serializable`接口的作用以及`serialVersionUID`的重要意义。此外,文章还探讨了如何通过自定义`readObject()`方法增强序列化的安全性,以及解决可序列化单例模式中可能产生的多实例问题。最后提供了代码示例和运行结果,帮助读者深入理解序列化的原理与实践技巧。
121 2