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)

相关推荐

  • 如何在win2003域服务器中添加域成员

    技术如何在win2003域服务器中添加域成员今天就跟大家聊聊有关如何在win2003域服务器中添加域成员,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、AD的基

    攻略 2021年12月9日
  • 怎么用Glide框架缓存压缩图片做一个网络图片查看器

    技术怎么用Glide框架缓存压缩图片做一个网络图片查看器这篇文章主要介绍“怎么用Glide框架缓存压缩图片做一个网络图片查看器”,在日常操作中,相信很多人在怎么用Glide框架缓存压缩图片做一个网络图片查看器问题上存在疑

    攻略 2021年10月29日
  • 概率公式c怎么计算,高中概率公式中的C是什么意思

    技术概率公式c怎么计算,高中概率公式中的C是什么意思C表示组合数概率公式c怎么计算,不考虑顺序。A表示排练数,考虑顺序。 组合数:从n个不同的元素中取m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的

    生活 2021年10月28日
  • 在SQL PLUS中格式化输出查询结果的方法是什么

    技术在SQL PLUS中格式化输出查询结果的方法是什么这篇文章主要讲解了“在SQL PLUS中格式化输出查询结果的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“

    攻略 2021年11月4日
  • Synchronized升级过程是怎样的

    技术Synchronized升级过程是怎样的Synchronized升级过程是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。要理解Synchron

    攻略 2021年10月20日
  • 如何使用Elastic+logstash+filebeat做Nginx日志分析

    技术如何使用Elastic+logstash+filebeat做Nginx日志分析这篇文章将为大家详细讲解有关如何使用Elastic+logstash+filebeat做Nginx日志分析,小编觉得挺实用的,因此分享给大

    攻略 2021年11月24日