参考文章

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

转载于:https://www.cnblogs.com/hujunzheng/p/6594320.html

Jackson序列化实例相关推荐

  1. SpringCloud采用Jackson序列化统一响应不正当的消息转换器导致的异常问题

    SpringCloud采用Jackson序列化统一响应不正当的消息转换器导致的异常问题 环境说明 org.springframework.cloud.spring-cloud-dependencies ...

  2. java json 序列化对象空值不处理_jackson 实体转json 为NULL或者为空不参加序列化(实例讲解)...

    使用jackson进行序列化时,往往会遇到后台某个实体对象的属性为null,当序列化成json时对应的属性也为null:这样在某些前端组件上应用该json对象会报错.(例如:echarts) 下面总结 ...

  3. 程序验证Jackson反序列化的规则、Jackson序列化与反序列化关键方法程序详细分析

    目录 0. 为什么要做这个分析 1. Jackson反序列化时,无参构造.有参构造的执行顺序[附程序截图] 1.1 没有无参构造时: 1.2 无参构造和有参构造方法都有的时候先走无参构造: 2. Ja ...

  4. spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava

    spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava在SPRING MVC3中,比如做REST时,经常要用JASON去解析,遇到了日期格式化的问题, ...

  5. Dubbo——Dubbo协议整合Jackson序列化解决方案

    环境配置 spring boot 2.6.3 spring cloud 2021.0.1 spring cloud alibaba 2021.0.1.0 nacos server 2.0.4 dubb ...

  6. Jackson序列化和反序列化

    1,下载Jackson工具包(jackson-core-2.2.3.jar  jackson-annotations-2.2.3.jar  jackson-databind-2.2.3.jar ) j ...

  7. 自定义jackson序列化_Jackson中的自定义反序列化程序和验证

    自定义jackson序列化 tl; dr:将输入验证添加到Jackson中的自定义json解串器中很重要. 在RHQ中,我们在几个地方使用了Json解析-直接在as7 / Wildfly插件中,或者通 ...

  8. JAVA 序列化 Jackson_SpringBoot系列——Jackson序列化

    前言 Spring Boot提供了与三个JSON映射库的集成: Gson Jackson JSON-B Jackson是首选的默认库. 官网介绍: 通常,我们将Java对象转成Json时称之为序列化, ...

  9. Effective Java之考虑用序列化代理代理序列化实例(七十八)

    我们知道,实现了序列化的类.在反序列化时,实例的创建是由readObject方法来完成的.由于这是一个不同于构造函数的创建类实例的通道,因此在构造函数中的状态约束条件在readObjetc中也得一条不 ...

最新文章

  1. 淘宝网7年变化图--建议非美工UED人员也看看
  2. Effective Java:对于全部对象都通用的方法
  3. 决策树Decision Tree 及实现
  4. 前端学习(1187):双向数据绑定2
  5. 编码的奥秘:编码与组合
  6. 习题 3.10 有一函数:写一程序,输入x,输出y值。
  7. 计算机木材染色 配色技术的应用技术,计算机配色技术在木材连缸染色中的应用研究.pdf...
  8. Ubuntu18.04-使用wine打开CAJ文件并解决乱码问题
  9. 拉卡拉支付——综合普惠金融科技平台
  10. vscode远程连接服务器,编写python代码无法补全
  11. 异常:Activity has leaked window com.android.internal.policy.impl.PhoneWindow
  12. 抓取1688商品图片|文描|视频|规格|属性等信息 并打包下载
  13. python计算年龄的方法_巧算年龄-随心随性无为而为-51CTO博客
  14. js闭包的理解及应用场景
  15. Windows下的日志机制
  16. NYOJ--1237最大岛屿
  17. 孟丽秋教授当选为慕尼黑工业大学第一副校长
  18. Qt入门(一)——自己动动手写一个简易的用户化界面(Qt命令行模式)
  19. 小陈学linux第三节
  20. 糕头:二维火小程序初探

热门文章

  1. python小波分解与重构_小波分解和重构
  2. 安装wordcloud_COVID19数据分析实战:WordCloud 词云分析
  3. FTP多用户权限 linux环境 一站式解决方案(基础篇)
  4. Git开发流程和工作流
  5. 第3篇:Flowable-IDM详述
  6. 查看linux是否为虚拟机,以及其它信息,cpu,主机型号,主板型号等
  7. 企业实战_22_MyCatSQL拦截
  8. Vite --- 创建Vue3项目
  9. 【Java】数据结构—— 单链表和双链表
  10. 五子棋项目结束总结_居家活动系列总结