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。  参考源码

  • 相关阅读:
    linux下apache(httpd)安装部署
    基于redis分布式缓存实现(新浪微博案例)
    python--字典
    django(四)
    django(三)
    django(二)
    django(一)
    053(八十)
    053(七十九)
    053(七十八)
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/6594320.html
Copyright © 2011-2022 走看看