在SpringBoot中的Jackson使用笔记

在SpringBoot中的Jackson使用笔记

常用的java转json,json反序列化为java等方法,这里定义成一个工具类来用jackson

package cn.ath.knowwikibackend.util;import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;@Slf4j
public class JacksonUtil {private JacksonUtil() {}// 日期格式化private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";/*** 配置正常的驼峰字段形式的json用的 OBJECT_MAPPER* {*     "name":"tom",*     "age: 22,*     "serialNumber":"STU0213131"* }*/private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();static {//对象的所有字段全部列入OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.ALWAYS);//取消默认转换timestamps形式OBJECT_MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//忽略空Bean转json的错误OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);//所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ssOBJECT_MAPPER.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));//忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);}/*** 配置 下划线字段形式的json用的 OBJECT_MAPPER* {*     "name":"tom",*     "age: 22,*     "serial_number":"STU0213131"* }*/private static final ObjectMapper OBJECT_MAPPER_SNAKE_CASE = new ObjectMapper();static {//对象的所有字段全部列入OBJECT_MAPPER_SNAKE_CASE.setSerializationInclusion(JsonInclude.Include.ALWAYS);//取消默认转换timestamps形式OBJECT_MAPPER_SNAKE_CASE.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//忽略空Bean转json的错误OBJECT_MAPPER_SNAKE_CASE.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);//所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ssOBJECT_MAPPER_SNAKE_CASE.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));//忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误OBJECT_MAPPER_SNAKE_CASE.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//转换为下划线OBJECT_MAPPER_SNAKE_CASE.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);}/*** 配置属性名不带引号的 非标准格式 的json 用的 OBJECT_MAPPER** Neo4j场景会用到这种格式* {*     name:"tom",*     age: 22,*     serialNumber:"STU0213131"* }** 如这个cql语句*  merge(:学生 {name:"tom",age: 22,serialNumber:"STU0213131"})*/private static final ObjectMapper OBJECT_MAPPER_BY_QUOTE_FIELD_NAMES = new ObjectMapper();static {OBJECT_MAPPER_BY_QUOTE_FIELD_NAMES.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);}/*** map转换成json格式String* @param map Map<String,Object>* @return String*/public static String map2String(Map<String,Object> map){String propertiesString = "";try {propertiesString = OBJECT_MAPPER_BY_QUOTE_FIELD_NAMES.writeValueAsString(map);} catch (JsonProcessingException e) {log.error(e.getMessage());}return propertiesString;}/*** 对象转Json格式字符串** @param obj 对象* @return Json格式字符串*/public static <T> String obj2String(T obj) {if (obj == null) {return null;}try {return obj instanceof String ? (String) obj : OBJECT_MAPPER.writeValueAsString(obj);} catch (JsonProcessingException e) {log.warn("Parse Object to String error : {}", e.getMessage());return null;}}/*** 对象转file* @param fileName String* @param obj  Object*/public static void obj2File(String fileName,Object obj){if (obj == null){return;}try {OBJECT_MAPPER.writeValue(new File(fileName),obj);} catch (IOException e) {e.printStackTrace();}}/*** 对象转Json格式字符串(格式化的Json字符串)** @param obj 对象* @return 美化的Json格式字符串*/public static <T> String obj2StringPretty(T obj) {if (obj == null) {return null;}try {return obj instanceof String ? (String) obj : OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(obj);} catch (JsonProcessingException e) {log.warn("Parse Object to String error : {}", e.getMessage());return null;}}/*** 字符串转换为自定义对象** @param str   要转换的字符串* @param clazz 自定义对象的class对象* @return 自定义对象*/public static <T> T string2Obj(String str, Class<T> clazz) {if (StringUtils.isEmpty(str) || clazz == null) {return null;}try {return clazz.equals(String.class) ? (T) str : OBJECT_MAPPER.readValue(str, clazz);} catch (Exception e) {log.warn("Parse String to Object error : {}", e.getMessage());return null;}}/*** 对象转Json格式字符串; 属性名从驼峰改为下划线形式** @param obj 对象* @return Json格式字符串*/public static <T> String obj2StringFieldSnakeCase(T obj) {if (obj == null) {return null;}try {ObjectMapper objectMapper = OBJECT_MAPPER_SNAKE_CASE;return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);} catch (JsonProcessingException e) {log.warn("Parse Object to String error : {}", e.getMessage());return null;}}/*** 字符串转换为自定义对象; 属性名从下划线形式改为驼峰** @param str   要转换的字符串* @param clazz 自定义对象的class对象* @return 自定义对象*/public static <T> T string2ObjFieldLowerCamelCase(String str, Class<T> clazz) {if (StringUtils.isEmpty(str) || clazz == null) {return null;}try {ObjectMapper objectMapper = OBJECT_MAPPER_SNAKE_CASE;return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);} catch (Exception e) {log.warn("Parse String to Object error : {}", e.getMessage());return null;}}/*** 字符串转换为自定义对象(List); 属性名从下划线形式改为驼峰** @param str           要转换的字符串* @param typeReference 自定义对象的typeReference List 对象* @return 自定义对象*/public static <T> List<T> string2ListFieldLowerCamelCase(String str, TypeReference<List<T>> typeReference) {if (StringUtils.isEmpty(str) || typeReference == null) {return null;}try {ObjectMapper objectMapper = OBJECT_MAPPER_SNAKE_CASE;return objectMapper.readValue(str, typeReference);} catch (Exception e) {log.warn("Parse String to Object error : {}", e.getMessage());return null;}}/*** 字符串转换为自定义字段转为list* @param str  String* @param typeReference   TypeReference* @param <T>  泛型* @return T   类型*/public static <T> T string2Obj(String str, TypeReference<T> typeReference) {if (StringUtils.isEmpty(str) || typeReference == null) {return null;}try {return (T) (typeReference.getType().equals(String.class) ? str : OBJECT_MAPPER.readValue(str, typeReference));} catch (IOException e) {log.warn("Parse String to Object error", e);return null;}}public static <T> T string2Obj(String str, Class<?> collectionClazz, Class<?>... elementClazzes) {JavaType javaType = OBJECT_MAPPER.getTypeFactory().constructParametricType(collectionClazz, elementClazzes);try {return OBJECT_MAPPER.readValue(str, javaType);} catch (IOException e) {log.warn("Parse String to Object error : {}" + e.getMessage());return null;}}
}

在springboot项目中配置全局序列化date返回前端字符串

需要在yml里配置jsckson

spring:jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss

在这里插入图片描述

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

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

相关文章

NIO三大组件和ByteBuffer

目录 一、NIO三大组件 1、Channel 2、Buffer 3、Selector 二、ByteBuffer 1、基本使用 2、内部结构 3、常用方法 allocate方法 读取方法 字符串与ByteBuffer互转 Scattering Reads 4、念包、半包问题 三、文件编程 1、FileChannel 2、两个Channel传输数据 3、…

conda 根目录内存满,更换新的目录

默认conda环境是在根目录&#xff0c;只需修改默认的目录即可 1 修改.condarc文件 vim ~/.condarc# 添加一行即可 envs_dirs:- /disk3/miniconda_envs/envs2 验证 创建一个conda环境 查看创建的路径 conda env list 这样以后都换把相关创建的包安装在disk3下&#xff0c;缓…

云原生应用交付平台 Orbit 主要功能与核心能力

GitOps GitOps 于 2017 年首创&#xff0c;是一种管理由 Kubernetes 提供支持的云原生系统的现代方式。它利用策略即代码方法来定义和管理现代应用程序堆栈的每一层——基础设施、网络、应用程序代码和 GitOps 管道本身。Orbit 基于 GitOps 方法理念提供以下能力&#xff1a; …

基于Yolov8的纸箱破损检测系统

目录 1.Yolov8介绍 2.纸箱破损数据集介绍 2.1数据集划分 2.2 通过voc_label.py得到适合yolov8训练需要的 2.3生成内容如下 3.训练结果分析 4. 纸张破损检测系统设计 4.1 PySide6介绍 4.2 安装PySide6 4.3 纸张破损检测系统设计 1.Yolov8介绍 Ultralytics YOLOv8是Ultral…

Uniapp_分包

前言&#xff1a;由于微信小程序的包只限制压缩不能超过2M&#xff0c;当开发的页面过多就要进行分包操作,tabbar页面不能进行分包其他页面可以 最多5个分包 不超过20M 第一步、找到这个位置 然后把这个代码复制进去 开启分包 "optimization" : {"subPackages&…

目录拆分爆破工具

burp开启被动扫描获取到大量target或者爬虫获取到大量target时&#xff0c;经常会出现以下URL的情况&#xff0c;手工无法对目录进行拆分进行简单的目录爆破&#xff0c;所以有了这款工具&#xff0c;思路比较简单&#xff0c;望批评指教。 http://target/path1/path2/path3/* …

vue使用emit控制改变父组件的值,实现子组件的显示与隐藏

vue使用emit控制改变父组件的值&#xff0c;实现子组件的显示与隐藏 需求概述 父组件在提交表单后&#xff0c;弹框进行提示&#xff0c;子组件是一个弹框。 vue版本 v2.x 实现原理 在父组件内建立控制器isShowModal&#xff0c;使用v-if来控制子组件的显示与隐藏。在子组…

强化学习从基础到进阶-案例与实践[5.1]:Policy Gradient-Cart pole游戏展示

强化学习从基础到进阶-案例与实践[5.1]&#xff1a;Policy Gradient-Cart pole游戏展示 强化学习&#xff08;Reinforcement learning&#xff0c;简称RL&#xff09;是机器学习中的一个领域&#xff0c;区别与监督学习和无监督学习&#xff0c;强调如何基于环境而行动&#x…

win10安装配置PostgreSQL

win10安装配置PostgreSQL 1 下载安装PostgreSQL ①进入官网https://www.postgresql.org/&#xff0c;点击页面中心处的download 也可以直接跳过下面的步骤(下面的步骤主要是为了帮助大家了解一般外国软件是如何从官网进入下载页面)&#xff0c;直接进入下载页面&#xff0c;链…

java的注解方式和xml方式这两种方式对数据库进行操作详解

首先需要引入mybatisplus包 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version> </dependency>第一种注解方式&#xff1a;参数是通过#{}来接收的 p…

LLaMA模型微调版本 Vicuna 和 Stable Vicuna 解读

Vicuna和StableVicuna都是LLaMA的微调版本&#xff0c;均遵循CC BY-NC-SA-4.0协议&#xff0c;性能方面Stable版本更好些。 CC BY-NC-SA-4.0是一种知识共享许可协议&#xff0c;其全称为"署名-非商业性使用-相同方式共享 4.0 国际"。 即 用的时候要署名原作者&#x…

信号链噪声分析18

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 到目前为止&#xff0c;我们考虑的是基带采样情况&#xff0c;即所有目标信号均位于第一奈奎斯特区内。 图 显示了另外一种情况&#xff0c;其中采样信号频带局限于第一奈奎斯…