zoukankan      html  css  js  c++  java
  • Jackson序列化实例

     参考文章

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

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

    关于使用ContextualSerializer的补充

      

       BeanSerializerFactory中有如下代码,

      

       

    关于设置SerializerModifier,如下

       

       

    两种实现序列化的方式

      方式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>

      

      方式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

      

     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}的效果。

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

      

      感兴趣的话请查看我的github。  参考源码

  • 相关阅读:
    Note/Solution 转置原理 & 多点求值
    Note/Solution 「洛谷 P5158」「模板」多项式快速插值
    Solution 「CTS 2019」「洛谷 P5404」氪金手游
    Solution 「CEOI 2017」「洛谷 P4654」Mousetrap
    Solution Set Border Theory
    Solution Set Stirling 数相关杂题
    Solution 「CEOI 2006」「洛谷 P5974」ANTENNA
    Solution 「ZJOI 2013」「洛谷 P3337」防守战线
    Solution 「CF 923E」Perpetual Subtraction
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/6594320.html
Copyright © 2011-2022 走看看