Jackson序列化实例

简介: 参考文章       Jackson使用ContextualSerializer在序列化时获取字段注解的属性       使用BeanSerializerModifier定制jackson的自定义序列化(null值的处理)   关于使用ContextualSerializer的补充   ...

 参考文章

      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
探索Linux命令gpgv2:安全通信与数据验证的利器
`gpgv2`是GPG的签名验证工具,用于确保文件完整性和来源真实性。基于公钥密码学,支持多种加密算法和OpenPGP标准。通过`--verify`等参数验证签名,例如`gpgv2 --verify signature_file file`。重要注意事项包括保护私钥、定期更新密钥、验证签名来源及使用强密码。在数据安全场景中,`gpgv2`是保障信息安全的利器。
|
监控 Nacos 微服务
集成nacos,使用钉钉发送服务下线告警
我们在集成微服务框架的时候,涉及服务太多,如果是单节点的话,遇到凌晨服务挂起的问题会很麻烦。并且原生的监控也不是很理想。这里结合nacos,再通过钉钉来发送服务下线告警,这样可在第一时间确定服务异常并及时处理。
993 0
|
缓存 监控 安全
Spring AOP 详细深入讲解+代码示例
Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的技术。它通过将横切关注点(例如日志记录、事务管理、安全性检查等)从主业务逻辑代码中分离出来,以模块化的方式实现对这些关注点的管理和重用。 在Spring AOP中,切面(Aspect)是一个模块化的关注点,它可以跨越多个对象,例如日志记录、事务管理等。切面通过定义切点(Pointcut)和增强(Advice)来介入目标对象的方法执行过程。 切点是一个表达式,用于匹配目标对象的一组方法,在这些方法执行时切面会被触发。增强则定义了切面在目标对象方法执行前、执行后或抛出异常时所
17909 4
|
11月前
|
JSON 前端开发 程序员
告别手动解析!借助 CodeBuddy 快速开发网页源码提取工具
这是一款基于 PyQt5 开发的网页源码解析工具,旨在解决查看网页源代码时功能不足的问题。工具支持加载网页源码、复制源码、解析 JSON 数据和链接、下载页面内容等功能,满足“查看、提取、保存”三大需求。通过不断迭代,增加了格式化 JSON、提取文章与图片链接、保存 HTML 文件等实用功能,为开发者提供高效便捷的源码解析体验。项目已开源,可前往 CNB 查看源码。
|
存储 人工智能 自然语言处理
OpenScholar:华盛顿大学联合艾伦研究所开源的学术搜索工具
OpenScholar是由华盛顿大学和艾伦AI研究所联合开发的开源学术搜索工具,旨在通过检索和综合科学文献中的相关论文来回答用户问题。该工具利用大规模科学论文数据库、定制的检索器和重排器,以及一个优化的8B参数语言模型,生成基于实际文献的准确回答。OpenScholar在提供事实性回答和准确引用方面超越了现有的专有和开源模型,所有相关代码和数据均已开源,支持并加速科学研究。
1549 1
OpenScholar:华盛顿大学联合艾伦研究所开源的学术搜索工具
|
监控 安全 JavaScript
Web安全-ReDos正则表达式的拒绝服务攻击
Web安全-ReDos正则表达式的拒绝服务攻击
735 0
|
Java Shell Docker
记一次异常停机损坏了orientdb 导致nexus2无法启动
在一台centos7上通过docker部署了nexus2. 昨天zabbix报警,主机宕机了。查看控制台发现有SATA报错(原因不明)。
3580 0
|
SQL Java 数据处理
SQL游标的详细使用方法与实例
SQL游标的详细使用方法与实例
|
Java 测试技术
几款Java模板引擎的性能评测
参评的几款模板引擎为:XMLTemplate(简称XT)Velocity(简称VT)CommonTemplate(简称CT)FreeMarker(简称FT)Smarty4j(简称ST)直接的java代码 以下所有测评的结果单位都是ms 性能评测考虑以下几个方面:变量输出/循环/分支,这三大类调用构成了普通模板80%以上的功能。
1969 0
|
Java Spring 容器
springboot如何忽略扫描某个包范围的组件
springboot如何忽略扫描某个包范围的组件

热门文章

最新文章