Jackson介绍及使用
点击 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介绍及使用相关推荐
- Jackson使用详细介绍
Jackson使用详细介绍 一 . Jackson 介绍 二. Jackson Maven 依赖 三. ObjectMapper 对象映射器 四. Jackson JSON 基本操作 1. Jacks ...
- Spring-boot 项目中使用 jackson 遇到的一个问题
jackson介绍 java代码中实现序列化和反序列化的工具类 jackson使用Demo https://github.com/Naylor55/JavaDebrisCode/tree/branch ...
- Jackson 解析 JSON 详细教程
JSON 对于开发者并不陌生,如今的 WEB 服务.移动应用.甚至物联网大多都是以 JSON 作为数据交换的格式.学习 JSON 格式的操作工具对开发者来说是必不可少的.这篇文章将介绍如何使用 Jac ...
- spring boot配置Jackson详解
Jackson介绍: Spring Boot支持与三种JSON mapping库集成:Gson.Jackson和JSON-B.Jackson是首选和默认的. Jackson是spring-boot-s ...
- Jackson解析JSON详细教程
目录 `JSON` 简述 `Jackson` 介绍 `Jackson` 的 `Maven` 依赖 `ObjectMapper` 对象映射器 `Jackson JSON` 的基本操作 `Jackson ...
- 使用Jackson实现json格式字符串与obj之间的转换
文章目录 1. json字符串简介 2. 转换工具 3. json与obj相互转换 2.1 obj转json字符串 2.2 json字符串转obj 2.3 转换为List类型 2.4 转化为Map类型 ...
- Spring默认使用的JSON工具--Jackson
一.Jackson介绍 我们常用的json转换工具包括fastJson.Gson.Jackson等.其中Gson是Google所维护,功能全.fastJson特点是快,但是爆出几次的重大bug让人很难 ...
- Jackson之jackson-databind
原文链接:http://www.dubby.cn/detail.html?id=9070 前几篇介绍Jackson的文章(Jackson介绍,Jackson之jackson-core),虽然很好,但是 ...
- JackSon的几种用法
JackSon介绍 本文使用的JackSon版本为2.9.6. JackSon是解析JSON和XML的一个框架,优点是简单易用,性能较高. JackSon处理JSON的方式 JackSon提供了三种J ...
最新文章
- PostgreSQL: epoch 新纪元时间的使用
- 今天下午接到阔总编的电话
- 工作中常用到的sql命令!!!
- 单元和集成测试的代码覆盖率
- 一本可能引发社会调查行业革命的书
- #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
- Web前端小例子——简单导航栏
- python爬虫2——下载文件(中华网图片库下载)
- [转载]资深程序员点评当前某些对Lotus Domino 的不实评论
- xposed自定义参数
- kafka rabbitmq优劣对比_17个方面对比Kafka、RabbitMQ、RocketMQActiveMQ分布式消息队列
- 【21天python打卡】第15天 python经典案例(1)
- 有什么软件方便画er图_数据库ER图绘制工具(DbSchema)
- Linux 十四 修改文件操作权限 用户文件权限详解
- mysql translate 函数_Oracle字符串函数-Translate()总结
- 短信接口api发送-kewail
- bert实践:关系抽取解读
- 计算机文件怎么取消隐藏文件,隐藏文件夹,教您电脑隐藏文件夹怎么恢复
- 教你十步实现内网穿透
- oracle 主键、唯一键值、唯一索引关系