点击 Mr.绵羊的知识星球 解锁更多优质文章。

目录

一、介绍

1. 简介

2. Jackson的三个核心模块

二、实际应用

1. 案例一

三、总结


一、介绍

1. 简介

Jackson是一个简单的、功能强大的、基于Java的应用库。它可以很方便完成Java对象和Json对象(xml文档or其它格式)进行互转。也是Spring家族的默认JSON/XML解析器。

2. Jackson的三个核心模块

(1) jackson-core:定义了低级的流式API,包括了JSON处理细节。
    (2) jackson-annotations:包含了Jackson的注解。
    (3) jackson-databind:实现了对象和JSON之间的转换,这个包依赖上面两个包。

不怎么了解JSON的同学:JSON介绍

二、实际应用

1. 案例一

在我们编写的接口中,经常会有一些冗余字段没有赋值,如果有非常多的冗余字段都为null,不仅给调试接口带来的不必要的麻烦,也占用了资源。

(1) 场景:

接口调用方要求我们提供的createAccount接口,如果接口调用异常响应:错误编码和信息。成功响应新增的账号信息。

(2) 代码:git地址

a. pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.5</version>
</dependency>

b. Controller代码

import com.wxy.common.exception.BusinessException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;/*** JacksonAccountController** @author wxy* @since 2023-01-23*/
@RestController
public class JacksonAccountController {/*** 创建账号** @param accountVo accountVo* @return JacksonRsp<AccountVo>*/@PostMapping("/accounts")public JacksonRsp<AccountVO> create(@RequestBody AccountVO accountVo) {JacksonRsp<AccountVO> jacksonRsp = new JacksonRsp<>();try {jacksonRsp.setResult(createAccount(accountVo, true));} catch (Exception e) {jacksonRsp.setCode("CreateAccountError");jacksonRsp.setMessage(e.getMessage());}return jacksonRsp;}/*** 创建账号** @param accountVo 账号实体* @param flag      是否正常执行* @return AccountVo*/private AccountVO createAccount(AccountVO accountVo, boolean flag) {if (flag) {// 创建账号成功accountVo.setCreateTime(LocalDateTime.now());return accountVo;} else {// 创建失败 抛出异常throw new BusinessException("create account error");}}
}

c. VO代码

import java.time.LocalDateTime;/*** AccountVo** @author wxy* @since 2023-01-23*/
public class AccountVO {private String id;private String name;private String desc;private LocalDateTime createTime;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public LocalDateTime getCreateTime() {return createTime;}public void setCreateTime(LocalDateTime createTime) {this.createTime = createTime;}
}

d. JacksonRsp代码

/*** JacksonRsp** @param <T> 结果类型* @author wxy* @since 2023-01-23*/
public class JacksonRsp<T> {/*** 编码*/private String code;/*** 错误信息*/private String message;/*** 响应结果*/private T result;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public T getResult() {return result;}public void setResult(T result) {this.result = result;}
}

正常响应结果(响应有null值):

{

"code": null,

"message": null,

"result": {

"id": "account_01",

"name": "账号01",

"desc": "this is account",

"createTime": "2023-01-23T16:12:24.6055759"

}

}

异常响应结果:

{

"code": "CreateAccountError",

"message": "create account error",

"result": null

}

d. JacksonConfig

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;import java.io.IOException;/*** JacksonConfig** @author wxy* @since 2022-01-23*/
@Configuration
public class JacksonConfig {@Bean@Primary@ConditionalOnMissingBean(ObjectMapper.class)public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {ObjectMapper objectMapper = builder.createXmlMapper(false).build();// 屏蔽掉值为null的参数objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);/// 修改值为null的参数值(需要处理打开方法并修改逻辑)/*objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<>() {@Overridepublic void serialize(Object o, JsonGenerator jsonGenerator,SerializerProvider serializerProvider) throws IOException {jsonGenerator.writeString("");}});*/return objectMapper;}
}

正常响应结果(增加JacksonConfig,响应无null值):

{

"result": {

"id": "account_01",

"name": "账号01",

"desc": "this is account",

"createTime": "2023-01-23T17:52:55.7194902"

}

}

异常响应结果:

{

"code": "CreateAccountError",

"message": "create account error"

}

三、总结

Jackson的使用方式还有很多,感兴趣可以网上搜索。去除响应JSON中为null的参数也有很多做法,例如:面向对象根据不同场景返回不同响应体(关注案例三)

参考文章:

1. Jackson介绍

Jackson介绍及使用相关推荐

  1. Jackson使用详细介绍

    Jackson使用详细介绍 一 . Jackson 介绍 二. Jackson Maven 依赖 三. ObjectMapper 对象映射器 四. Jackson JSON 基本操作 1. Jacks ...

  2. Spring-boot 项目中使用 jackson 遇到的一个问题

    jackson介绍 java代码中实现序列化和反序列化的工具类 jackson使用Demo https://github.com/Naylor55/JavaDebrisCode/tree/branch ...

  3. Jackson 解析 JSON 详细教程

    JSON 对于开发者并不陌生,如今的 WEB 服务.移动应用.甚至物联网大多都是以 JSON 作为数据交换的格式.学习 JSON 格式的操作工具对开发者来说是必不可少的.这篇文章将介绍如何使用 Jac ...

  4. spring boot配置Jackson详解

    Jackson介绍: Spring Boot支持与三种JSON mapping库集成:Gson.Jackson和JSON-B.Jackson是首选和默认的. Jackson是spring-boot-s ...

  5. Jackson解析JSON详细教程

    目录 `JSON` 简述 `Jackson` 介绍 `Jackson` 的 `Maven` 依赖 `ObjectMapper` 对象映射器 `Jackson JSON` 的基本操作 `Jackson ...

  6. 使用Jackson实现json格式字符串与obj之间的转换

    文章目录 1. json字符串简介 2. 转换工具 3. json与obj相互转换 2.1 obj转json字符串 2.2 json字符串转obj 2.3 转换为List类型 2.4 转化为Map类型 ...

  7. Spring默认使用的JSON工具--Jackson

    一.Jackson介绍 我们常用的json转换工具包括fastJson.Gson.Jackson等.其中Gson是Google所维护,功能全.fastJson特点是快,但是爆出几次的重大bug让人很难 ...

  8. Jackson之jackson-databind

    原文链接:http://www.dubby.cn/detail.html?id=9070 前几篇介绍Jackson的文章(Jackson介绍,Jackson之jackson-core),虽然很好,但是 ...

  9. JackSon的几种用法

    JackSon介绍 本文使用的JackSon版本为2.9.6. JackSon是解析JSON和XML的一个框架,优点是简单易用,性能较高. JackSon处理JSON的方式 JackSon提供了三种J ...

最新文章

  1. PostgreSQL: epoch 新纪元时间的使用
  2. 今天下午接到阔总编的电话
  3. 工作中常用到的sql命令!!!
  4. 单元和集成测试的代码覆盖率
  5. 一本可能引发社会调查行业革命的书
  6. #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  7. Web前端小例子——简单导航栏
  8. python爬虫2——下载文件(中华网图片库下载)
  9. [转载]资深程序员点评当前某些对Lotus Domino 的不实评论
  10. xposed自定义参数
  11. kafka rabbitmq优劣对比_17个方面对比Kafka、RabbitMQ、RocketMQActiveMQ分布式消息队列
  12. 【21天python打卡】第15天 python经典案例(1)
  13. 有什么软件方便画er图_数据库ER图绘制工具(DbSchema)
  14. Linux 十四 修改文件操作权限 用户文件权限详解
  15. mysql translate 函数_Oracle字符串函数-Translate()总结
  16. 短信接口api发送-kewail
  17. bert实践:关系抽取解读
  18. 计算机文件怎么取消隐藏文件,隐藏文件夹,教您电脑隐藏文件夹怎么恢复
  19. 教你十步实现内网穿透
  20. oracle 主键、唯一键值、唯一索引关系

热门文章

  1. 百度外卖 php,百度外卖移动组件架构与优化
  2. 微信公众号报错 10003
  3. .zip.001 .zip.002解压缩
  4. 《不公平的优势》——错误的教育/培训观念与金钱观
  5. 《操作系统原理及应用》题库-计算题
  6. 【软件推荐】 AVAST! 全功能杀毒软件
  7. 【深度好文】多任务模型中的DataLoader实现
  8. Mysql高级教程思维导图
  9. win7c盘空间越来越小_教你两招电脑c盘空间越来越小怎么清理
  10. vue中Number方法将字符串转换为数字