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)

相关推荐

  • 如何理解python中不可重复的数据集合Set

    技术如何理解python中不可重复的数据集合Set如何理解python中不可重复的数据集合Set,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获

    攻略 2021年12月4日
  • mysql如何查询月份

    技术mysql如何查询月份这篇文章给大家分享的是有关mysql如何查询月份的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 mysql查询月份的方法:1、通过“sel

    攻略 2021年11月26日
  • 如何开启sqlserver2014导入EXCEL功能

    技术如何开启sqlserver2014导入EXCEL功能这篇文章将为大家详细讲解有关如何开启sqlserver2014导入EXCEL功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    攻略 2021年11月11日
  • 支付宝转账记录怎么查,支付宝转账记录怎么查

    技术支付宝转账记录怎么查,支付宝转账记录怎么查支付宝转账记录怎么查?现在我们很多时候都会使用支付宝的转账功能。不过有的时候我们会忘记转账给谁了转账了多少钱,那么支付宝转账记录怎么查看呢?支付宝转账记录又在哪查看呢?现在就

    生活 2021年10月28日
  • 整流桥KBP307-ASEMI如何测量好坏之电阻测试法

    技术整流桥KBP307-ASEMI如何测量好坏之电阻测试法 整流桥KBP307-ASEMI如何测量好坏之电阻测试法编辑-Z
    测量整流桥好坏的方法一般有两种,一种是电阻测试法,一种是压降测试法。整流桥KB

    礼包 2021年10月27日
  • 恩格斯名言,有关资本主义经济制度的名人名言

    技术恩格斯名言,有关资本主义经济制度的名人名言在资本主义生产的基础上恩格斯名言,历时较长范围较广的事业,要求在较长时间内预付较大量的货币资本。所以,这一类领域里的生产取决于单个资本家拥有的货币资本的界限。这个限制被信用制

    生活 2021年10月25日