Jackson使用ContextualSerializer在序列化时获取字段注解的属性html
使用BeanSerializerModifier定制jackson的自定义序列化(null值的处理)前端
BeanSerializerFactory中有以下代码,java
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>
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
是这样的一个场景, 人员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。 参考源码