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)

相关推荐

  • excel创建组,excel创建组合的快捷键

    技术excel创建组,excel创建组合的快捷键快捷键excel创建组:Alt+A+M直接按下这个快捷键即可将Excel里面的数值给进行筛选即可,操作起来非常简单!
    2、 拆分数据
    快捷键:Ctrl+E
    如何才能将Exc

    生活 2021年10月28日
  • 4k 10bit hdr 视频使用 svp 插帧, madvr 渲染教程

    技术4k 10bit hdr 视频使用 svp 插帧, madvr 渲染教程 4k 10bit hdr 视频使用 svp 插帧, madvr 渲染教程1 技术选型
    1.1 为什么用 MPC-BE 而不是

    礼包 2021年11月22日
  • pl什么意思,JM们,我到底PL了没啊?

    技术pl什么意思,JM们,我到底PL了没啊?我10月份做的造影,当时是备孕十一个月都没有好孕,去医院做了所有检查,除了造影,以前听说造影痛苦一直不敢做,医生也不建议我做,说是备孕时间短,后来等所有检查结果出来一切都没问题

    生活 2021年10月27日
  • 什么是Linux内核空间与用户空间

    技术什么是Linux内核空间与用户空间今天就跟大家聊聊有关什么是Linux内核空间与用户空间,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。本文以 32 位系统为例

    攻略 2021年10月22日
  • 1063 Set Similarity (25 分),set)

    技术1063 Set Similarity (25 分),set) 1063 Set Similarity (25 分)(set)Given two sets of integers, the simi

    礼包 2021年11月27日
  • MySQL基础SQL入门

    技术MySQL基础SQL入门 MySQL基础SQL入门MySQL基础SQL入门
    1. 数据库的基本概念
    1.1 什么是数据库1. 数据库(DataBase) 就是存储和管理数据的仓库
    2. 其本质是一个

    礼包 2021年12月1日