Jackson序列化實例

 參考文章

      Jackson使用ContextualSerializer在序列化時獲取字段註解的屬性html

      使用BeanSerializerModifier定製jackson的自定義序列化(null值的處理)前端

 

關於使用ContextualSerializer的補充

  

   BeanSerializerFactory中有以下代碼,java

  

   

關於設置SerializerModifier,以下

   

 

   

 

兩種實現序列化的方式

  方式1:自定義json serialize 實現ContextualSerializer接口

  1. bo中自定義@ReferSerialTransfer註解git

  

  2. 自定義註解 ReferSerialTransfer.javagithub

  

  3. 自定義 json serialize實現spring

  

  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)json

  

 

  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.javamvc

  

  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。  參考源碼

相關文章
相關標籤/搜索