Jackson:Java对象和JSON字符串的转换处理库使用指南

Jackson介绍

Jackson 是一个非常流行的 Java JSON 处理库,它能够将 Java 对象与 JSON 字符串相互转换

Jackson 工具主要用于将请求的参数(例如前端发送的 JSON 数据)和响应的数据(例如后端返回给前端的数据)转换成 Java 对象,或者将 Java 对象转换为 JSON 格式的字符串。

使用示例

出参转为 JSON:

出参是指从后端(服务器端)返回给前端(客户端)数据时,数据通常是 Java 对象,Jackson 可以将这些 Java 对象转化为 JSON 格式的字符串,然后发送到前端。

例如,后端返回一个用户信息对象(User),通过 Jackson 将该对象转换为 JSON 字符串发送给前端:

public class User {private String name;private int age;
}@RestController
public class UserController {@GetMapping("/user")public User getUser() {return new User("John", 25); // 返回 User 对象}
}

Jackson 会将 User 对象转化为如下 JSON 格式的数据:

{"name": "John","age": 25
}

入参转为 Java 对象:

入参是指从前端传递到后端的 JSON 数据。前端通常以 JSON 格式传递数据(如 POST 请求),后端接收时会将这些 JSON 数据转换为相应的 Java 对象,以便进行后续的处理。

例如,前端传递一个 JSON 数据来创建一个新的用户,后端接收到 JSON 数据后,Jackson 会将其转换为 User 对象。

前端发送的请求:

{"name": "Alice","age": 30
}

后端的接收代码:

@PostMapping("/user")
public User createUser(@RequestBody User user) {return user; // 通过 Jackson 自动将 JSON 转换成 User 对象
}

在此例中,Jackson 会自动将 JSON 数据 { “name”: “Alice”, “age”: 30 } 转换为一个 User 对象。

使用方法

在需要的项目里添加依赖:

            <!-- Jackson --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.2</version>   <!--按照自己需要的版本来--></dependency>

使用


public class Example {public static void main(String[] args) throws Exception {ObjectMapper objectMapper = new ObjectMapper();SomeObject obj = new SomeObject();String jsonString = objectMapper.writeValueAsString(obj);System.out.println(jsonString);}
}

ObjectMapper 是 Jackson 库中的一个核心类,它位于 com.fasterxml.jackson.databind 包中。

Jackson 是一个流行的 Java 库,用于处理 JSON 数据。它提供了将 Java 对象转换为 JSON 字符串(序列化)和将 JSON 字符串转换为 Java 对象(反序列化)等功能。

在使用的时候可以直接通过以上这种方法创建ObjectMapper实例来使用,也可以自己创建工具类

@Slf4j
public class JsonUtil {private static final ObjectMapper INSTANCE = new ObjectMapper();// 将对象转换为 JSON 字符串public static String toJsonString(Object obj) {try {return INSTANCE.writeValueAsString(obj); // 使用 Jackson 库的 ObjectMapper 将对象转为 JSON 字符串} catch (JsonProcessingException e) {return obj.toString(); // 如果发生异常,返回对象的 toString}}
}

虽然不一定非得使用 JsonUtil 类,但它作为工具类有如下优点:

封装和复用:将 JSON 处理逻辑封装到一个单独的工具类中,避免在项目的多个地方重复写 ObjectMapper 的代码。如果项目中多次用到 JSON 转换,统一使用 JsonUtil 可以提高代码的可维护性和复用性。

异常处理:在 JsonUtil 类中,可以针对 JSON 序列化过程中的异常做统一的处理,比如返回对象的 toString 方法,避免直接抛出异常或中断程序执行。

日志记录的封装:如果需要为 JSON 转换添加额外的日志功能或者其他操作,统一在 JsonUtil 中修改即可,可以避免在其他地方修改代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3+SpringBoot3+Sa-Token+Redis+mysql8通用权限系统

sa-token支持分布式token 前后端代码&#xff0c;地球号: bright12389

Leetcode 336 回文对

示例 1&#xff1a; 输入&#xff1a;words ["abcd","dcba","lls","s","sssll"] 输出&#xff1a;[[0,1],[1,0],[3,2],[2,4]] 解释&#xff1a;可拼接成的回文串为 ["dcbaabcd","abcddcba","sl…

基于Vue+SpringBoot的考研学习分享平台设计与实现

摘要 考研学习分享平台是一个专注于为考研学子提供全面学习资源和经验分享的互动社区。这里汇聚了众多考研成功者的经验心得&#xff0c;涵盖各个学科领域的备考技巧和策略。平台不仅提供丰富的学习资料&#xff0c;还设有在线答疑、模拟考试等实用功能&#xff0c;帮助考生高…

【C++】C++11新特性详解:可变参数模板与emplace系列的应用

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriori…

TCP为什么需要三次握手?两次握手或四次握手可以吗?

&#xff08;1&#xff09;三次握手可以保证双方具有接收和发送的能力 第一次握手服务端可以确认客户端的发送能力和服务端的接收能力是正常的&#xff1b;第二次握手客户端可以确认客户端和服务端的收发能力是正常的&#xff0c;但是服务端无法确认客户端的接收能力是正常的&…

nature communications论文 解读

题目《Transfer learning with graph neural networks for improved molecular property prediction in the multi-fidelity setting》 这篇文章主要讨论了如何在多保真数据环境&#xff08;multi-fidelity setting&#xff09;下&#xff0c;利用图神经网络&#xff08;GNNs&…

Cmakelist.txt之Linux-redis配置

1.cmakelist.txt cmake_minimum_required(VERSION 3.16) ​ project(redis_linux_test LANGUAGES C) ​ ​ ​ add_executable(redis_linux_test main.c) ​ # 设置hiredis库的头文件路径和库文件路径 set(Hiredis_INCLUDE_DIR /usr/local/include/hiredis) set(Hiredis_LIBRA…

unity小:Unity WebGL 嵌入前端网页中的iframe并实现双向通信

可以使用 Unity 的 SendMessage 方法和 JavaScript 的 postMessage 方法来实现。以下是一个基本的步骤指南&#xff1a; 1. 在 Unity 中设置 WebGL 项目 首先&#xff0c;你需要在 Unity 中构建一个 WebGL 项目&#xff1a; 打开 Unity 项目。选择 File -> Build Setting…

c ++零基础可视化——vector

c 零基础可视化——vector 初始化 vector<int> v0(5); // 0 0 0 0 0 vector<int> v1(5, 1); // 1 1 1 1 1 vector<int> v2{1, 2, 3} // 1 2 3 vector<int> v3(v1); // 1 1 1 1 1 vector<vector<int>> v4(2, vect…

基于Qt/C++/Opencv实现的一个视频中二维码解析软件

本文详细讲解了如何利用 Qt 和 OpenCV 实现一个可从视频和图片中检测二维码的软件。代码实现了视频解码、多线程处理和界面更新等功能&#xff0c;是一个典型的跨线程图像处理项目。以下分模块对代码进行解析。 一、项目的整体结构 项目分为以下几部分&#xff1a; 主窗口 (M…

常见的 git 提交备注类型

在 Git 提交中&#xff0c;常见的提交备注&#xff08;commit message&#xff09;遵循一定的约定&#xff0c;这有助于代码管理、版本控制以及团队协作。fix 和 feat 是常见的提交类型&#xff0c;下面是这两个的含义&#xff0c;以及其他常见的提交类型。 常见的 Git 提交备…

android-studio-4.2下载 、启动

下载 分享一个国内的android studio网站&#xff0c;可以下载SDK和一些Android studio开发工具 https://www.androiddevtools.cn/ 启动 JAVA_HOME/app/zulu17.48.15-ca-jdk17.0.10-linux_x64/ /app5/android-studio-home/android-studio-ide-201.6568795-linux-4.2C1/bin/s…

C语言练习.if.else语句.strstr

今天在做题之前&#xff0c;先介绍一下&#xff0c;新学到的库函数strstr 想要使用它&#xff0c;要先给它一个头文件<string.h> char *strstr(const char*str1,const char*str2); 首先&#xff1a;1.strstr的返回值是char&#xff0c;字符类型的。 2.两个实参&#xff…

丹摩|丹摩智算平台深度评测

1. 丹摩智算平台介绍 随着人工智能和大数据技术的快速发展&#xff0c;越来越多的智能计算平台涌现&#xff0c;为科研工作者和开发者提供高性能计算资源。丹摩智算平台作为其中的一员&#xff0c;定位于智能计算服务的提供者&#xff0c;支持从数据处理到模型训练的全流程操作…

美创科技入选2024数字政府解决方案提供商TOP100!

11月19日&#xff0c;国内专业咨询机构DBC德本咨询发布“2024数字政府解决方案提供商TOP100”榜单。美创科技凭借在政府数据安全领域多年的项目经验、技术优势与创新能力&#xff0c;入选收录。 作为专业数据安全产品与服务提供商&#xff0c;美创科技一直致力于为政府、金融、…

CSS —— 子绝父相

相对定位&#xff1a;占位&#xff1b;不脱标 绝对定位&#xff1a;不占位&#xff1b;脱标 希望子元素相对于父元素定位&#xff0c;又不希望父元素脱标&#xff08;父元素占位&#xff09; 子级是 绝对定位&#xff0c;不会占有位置&#xff0c; 可以放到父盒子里面的任何一…

废品买卖回收管理系统|Java|SSM|Vue| 前后端分离

【重要①】前后端源码万字文档部署文档 【重要②】正版源码有问题包售后 【包含内容】 【一】项目提供非常完整的源码注释 【二】相关技术栈文档 【三】源码讲解视频 【其它服务】 【一】可以提供远程部署安装&#xff0c;包扩环境 【…

webpack配置和打包性能优化

文章目录 webpack基础配置loaderpluginloader 和 plugin 的区别devServer打包性能优化1、按需引入组件2、externals 属性3、给定文件匹配范围4、noParse 属性5、cacheDirectory 缓存属性6、happyPack 多个子进程并行 webpack基础配置 mode:development&#xff1a;设置webpack…

Flink学习连载第二篇-使用flink编写WordCount(多种情况演示)

使用Flink编写代码&#xff0c;步骤非常固定&#xff0c;大概分为以下几步&#xff0c;只要牢牢抓住步骤&#xff0c;基本轻松拿下&#xff1a; 1. env-准备环境 2. source-加载数据 3. transformation-数据处理转换 4. sink-数据输出 5. execute-执行 DataStream API开发 //n…

构建高效在线教育:SpringBoot课程管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理在线课程管理系统的相关信息成为必然。开发…