jackson 怎么创建json(jackson解析json)

技术如何使用@JacksonInject与@JsonAlias注解如何使用@JacksonInject与@JsonAlias注解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的

如何使用@ JacksonInject和@ JsonAlias的注释,很多新手都不清楚。为了帮助大家解决这个问题,下面小编就详细讲解一下。需要的人可以从中学习,希望你能有所收获。

让我们继续介绍如何在JSON反序列化中使用@ JacksonInject注释和@ JsonAlias注释。

00-1010当使用JSON格式进行反序列化时,我们经常会有这样的需求。我们从客户端或其他渠道获得了一个JSON数据对象,它包含几个属性。但是当我们反序列化JSON字符串时,我们需要向其中添加一些默认数据,例如:

响应数据的响应时间可以指定为当前时间;

数据反序列化的操作符,分配给系统的当前用户等。

客户端本身返回的数据不会携带这些附加信息。此时,我们可以使用JacksonInject注释在JSON字符串反序列化为对象时添加这些附加信息。下面是如何使用JacksonInject。

[@ Data](https://my . oschina . net/dif rik)

publicclassPlayerStar{

privateStringname

privateIntegerage

privateString[]爱好;//爱好,数组

privatestiststringfriends;//朋友

privateMapString,BigDecimalsalary//年收入地图

@ Jackson inject(' response time ')//注意这里

privatelocatatetimeresponsettime;

}让我们测试反序列化的过程。需要注意的是,下面的jsonInString没有携带responseTime信息,但是我们在反序列化过程中将它注入到了java对象中。

[@ Test](https://my . oschina . net/azi bug)

void testjs 2 object()throwsioxexception {

//为响应时间分配当前值。

可注入值。Stdiv=newInjectableValues。STD();

iv.addValue('responseTime ',local datetime . now());

ObjectMappermapper=new objectmapper();

mapper . setinjectablevalues(iv);//在反序列化过程中,为对象分配一个可插入的值。

//将JSON字符串反序列化为java对象

stringjsoninstringing=' { \ ' name ' : ' Jordan \ ',\ ' age \ ' 336045,\ ' affairs ' 3360[\ ' golf \ ',\ '棒球\ ']} ';

players tarjordan=mapper . readvalue(jsonInString,players tar . class);

System.out.println(约旦);

}最终的反序列化结果,java对象的toString()方法的输出结果如下。您可以看到还有一个额外的responseTime赋值属性,其值是当前时间。

球员(姓名=乔丹,年龄=45,爱好=[高尔夫,棒球],朋友=null,工资=null,

nbsp;responseTime=2020-09-22T06:41:09.192)

二、按照数据类型type进行数据注入

在上文的代码中,JSON字符串反序列化为对象,使用的是属性id的方法进行注入的

  @JacksonInject("responseTime")      //注意这里responseTime为属性id
  private LocalDateTime responseTime;
  InjectableValues.Std iv = new InjectableValues.Std();
  iv.addValue("responseTime", LocalDateTime.now());  //注意这里responseTime为属性id,而这要统一

除了可以按照属性id进行数据的注入,还可以使用java type数据类型进行数据注入。这种方法在一个java 类中,多个成员变量数据类型重复的时候,比如定义多个LocalDateTime成员变量,用起来就不太方便了。所以还是建议大家使用属性id的方法进行注入数据注入。

  @JacksonInject
  private LocalDateTime responseTime;
  InjectableValues.Std iv = new InjectableValues.Std();
  iv.addValue(LocalDateTime.class, LocalDateTime.now());  //注意这里LocalDateTime.class

三、 @JsonAlias注解

当我们在开发过程中,可能在v1.0的版本中我们定义的PlayerStar类(上文)包含name属性,但是我们用着用着发现name这个单词太通用了,在很多的地方都是系统关键字;我们希望在v2.0版本中,给这个成员变量换一个名字,叫做starName,或者playerName。但是我们不希望用户废弃v1.0的接口。 也就是说我们希望做到多版本兼容,客户端传送过来的JSON字符串,可以是name、可以是playerName、可以是starName。我们该怎么做?答案是使用@JsonAlias注解

@Data
public class PlayerStar {

  @JsonAlias({"starName", "playerName" })
  private String name;

下面三种JSON格式数据都可以被正确的反序列化为PlayerStar对象,并为name成员变量赋值

String jsonInString = "{\"name\":\"乔丹\",\"age\":45,\"hobbies\":[\"高尔夫球\",\"棒球\"]}";
String jsonInString = "{\"starName\":\"乔丹\",\"age\":45,\"hobbies\":[\"高尔夫球\",\"棒球\"]}";
String jsonInString = "{\"playerName\":\"乔丹\",\"age\":45,\"hobbies\":[\"高尔夫球\",\"棒球\"]}";

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/144633.html

(0)

相关推荐

  • 什么叫奇数什么叫偶数,什么叫做偶数

    技术什么叫奇数什么叫偶数,什么叫做偶数定义什么叫奇数什么叫偶数:整数中,能够被2整除的数,叫做偶数. 若不能,它就是奇数特别提示:偶数包括正偶数、负偶数和0.
    所有整数不是奇数(又称单数),就是偶数(又称双数).若某数是

    生活 2021年10月23日
  • React Router 5.1.0如何使用useHistory实现页面跳转导航

    技术React Router 5.1.0如何使用useHistory实现页面跳转导航React Router 5.1.0如何使用useHistory实现页面跳转导航,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希

    攻略 2021年11月12日
  • DAY17 个人中心头像设置

    技术DAY17 个人中心头像设置 DAY17 个人中心头像设置先来说存储文件的两种情形,同文件不同名的存储以及同名不同文件的存储
    解决的方法就是指纹,用指纹来识别文件,并通过指纹进行文件的获取
    写入

    礼包 2021年10月28日
  • 软件设计-迭代器模式

    技术软件设计-迭代器模式 软件设计-迭代器模式JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL

    礼包 2021年12月14日
  • 变脸是什么剧,究竟什么样的脸才称得上剧抛脸

    技术变脸是什么剧,究竟什么样的脸才称得上剧抛脸我觉得剧抛脸可以提名任嘉伦变脸是什么剧。所谓的剧抛脸就是同一个演员,他在演任何一部戏的时候没有他本人的影子。也没有他上一部作品的影子,演的就是这部作品中的角色。每演一部作品不

    生活 2021年10月29日
  • Vue正则写法是什么

    技术Vue正则写法是什么这篇文章主要讲解了“Vue正则写法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue正则写法是什么”吧!前言正则表达式,又称规则表达式。它

    攻略 2021年11月1日