重新整理了新版JSON工具类和一些见解

封装好了,工具类,直接粘贴就好了:所需依赖 springboot,hutool 

package com.jmj.gulimall.product.utils;import cn.hutool.core.bean.BeanUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import com.jmj.gulimall.product.vo.spu.Attr;
import lombok.*;import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;public class JsonUtils {private final static ObjectMapper objectMapper;@Data@AllArgsConstructor@NoArgsConstructor@EqualsAndHashCode(callSuper = true)//不加这个情况下重写的Hashcode和Equals 不会比较父类属性值@ToString(callSuper = true)//包括父类@JsonIgnoreProperties({"attrValue","attrId","attrName"})//这个注解可以忽略父类属性,不需要spring环境public static class Energy extends Attr {@JsonIgnore//忽略本类字段private String name;private Date time;}public static ObjectMapper instance(DateFormat dateFormat){ObjectMapper objectMapper = new ObjectMapper();//{"name":"边杰","time":"2024-06-21T10:43:43.480+0000"}objectMapper.setDateFormat(dateFormat);//中间没有:号objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);//禁用转换时间戳// 序列化时忽略未知属性objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);// 禁用忽略大小写的特性objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, false);// 设置序列化时不包含空属性// objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 不包括null值objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); // 全部return objectMapper;}public static ObjectMapper instance(){return instance(new StdDateFormat().withColonInTimeZone(false));}static {objectMapper = instance();}public static DateFormat format(){SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return simpleDateFormat;}public static String getJson(Object obj, boolean exIsThrow) {try {return objectMapper.writeValueAsString(obj);} catch (JsonProcessingException e) {e.printStackTrace();if (exIsThrow) {throw new RuntimeException("JSON解析异常 e=" + e.getMessage());} else {return null;}}}public static String getJson(Object obj) {return getJson(obj, false);}public static <R> R getObj(String json, Class<R> clazz, boolean exIsThrow) {try {return objectMapper.readValue(json, clazz);} catch (JsonProcessingException e) {e.printStackTrace();if (exIsThrow) {throw new RuntimeException("JSON解析异常 e=" + e.getMessage());} else {return null;}}}public static <R> R getObj(String json, Class<R> clazz) {return getObj(json, clazz, false);}public static <T> T getObj(String json,TypeReference<T> type, boolean exIsThrow) {try {return objectMapper.readValue(json, type);} catch (JsonProcessingException e) {e.printStackTrace();if (exIsThrow) {throw new RuntimeException("JSON解析异常 e=" + e.getMessage());} else {return null;}}}public static <T> T getObj(String json,TypeReference<T> type) {return getObj(json, type,false);}public static void main(String[] args) throws JsonProcessingException {
//        List<Energy> list = Arrays.asList(new Energy("边界", new Date()), new Energy("边界", new Date()), new Energy("边界", new Date()));
//        String s = getJson(list);
//        System.out.println(s);
//        List<Energy> energy = getObj("[{\"attrId\":\"123\",\"attrName\":null,\"name\":\"边界\",\"time\":\"2024-06-21T11:59:00.118+0000\"},{\"attrId\":null,\"attrName\":null,\"name\":\"边界\",\"time\":\"2024-06-21T11:59:00.118+0000\"},{\"attrId\":null,\"attrName\":null,\"name\":\"边界\",\"time\":\"2024-06-21T11:59:00.118+0000\"}]",
//                new TypeReference<List<Energy>>() {},true);
//        System.out.println(energy);//        System.out.println(instance(format()).writeValueAsString(list));Energy energy = new Energy("边界", new Date());energy.setAttrId(123L);energy.setAttrName("a");energy.setAttrValue("as");System.out.println(getJson(energy));Attr attr = new Attr();//父类属性也会Copy过来BeanUtil.copyProperties(energy,attr);System.out.println(attr);}}

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

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

相关文章

技术管理转型之战:决策之道-管理中的智慧与策略

文章目录 引言一、决策的重要性二、常见的决策方式1. 理性决策&#xff08;Rational Decision Making&#xff09;2. 有限理性&#xff08;Bounded Rationality&#xff09;3. 直觉决策&#xff08;Intuitive Decision Making&#xff09;4. 循证管理&#xff08;Evidence-Base…

一文读懂Java多线程并发之内存模型

什么是内存模型? Java内存模型(Java Memory Model)描述了Java编程语言中的线程如何与内存进行交互,是和多线程相关的一组规范,需要各个 JVM 的实现来遵守 JMM 规范,以便于开发者可以利用这些规范,更方便地开发多线程程序。有了这些规范,即便同一个程序在不同操作系统的虚…

WHAT - HTTP keep-alive 持久性连接和内存泄漏问题

目录 一、介绍HTTP 持久性连接&#xff08;persistent connection&#xff09;实现细节示例持久性连接的优化管道化&#xff08;Pipelining&#xff09;HTTP/2 和 HTTP/3 二、Node.js HTTP Agent 开启 keepAlive 导致的内存泄漏问题Node.js HTTP Agent 和 Socket 池Keep-Alive …

聚焦 Navicat 17 新特性 | 查询与配置的革新之处

随着 Navicat 17 的发布&#xff0c;引起业界热烈讨论与关注&#xff0c;这也标志着 Navicat 的产品力再次飞跃。新版本引入的众多创新特性极大地提升了用户在数据库管理和数据分析方面的体验&#xff0c;涵盖模型设计与同步、数据字典、数据分析&#xff08;data profiling&am…

图说SpringCloudStream消息驱动

SpringCloud Stream消息驱动实现原理 通过定义Binder绑定器作为中间层&#xff0c;实现了应用程序和消息中间件之间实现细节的隔离。通过向应用程序暴露统一的Channel通道&#xff0c;可以让应用程序不再需要考虑各种不同的消息中间件实现的兼容性问题。当需要升级消息中间件&a…

第九届世界渲染大赛什么时候开始举办?

​第九届世界渲染大赛即将开启&#xff0c;全球设计师和艺术家将汇聚一堂&#xff0c;展现3D艺术的创新与美感。敬请期待这场业界顶级的视觉盛宴&#xff0c;让我们共同关注大赛的启幕时刻。 第九届世界渲染大赛开始时间 预计时间&#xff1a;2024年7月(中旬) 报名方法&#…

服务端代码编写中MySql大小写在Java中报错问题解决

报错信息&#xff1a; 原因&#xff1a;MySql和Java变量大小写产生的冲突。 经过查阅各个博客等&#xff0c;得出浅显结论&#xff08;不一定对&#xff09;&#xff1a;MySql大小写不敏感&#xff0c;Java大小写敏感&#xff0c;当Javabean转为MySql数据库表时&#xff0c;Ja…

微信小程序生命周期

微信小程序的生命周期包括两个主要部分&#xff1a;应用生命周期和页面生命周期。下面我将详细介绍它们的具体内容。 应用生命周期 onLaunch&#xff1a; 触发时机&#xff1a;小程序初始化完成时&#xff08;全局只触发一次&#xff09;。 用途&#xff1a;通常用于进行一些…

高效处理大数据:Kafka的13个核心概念详解

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是你们的小米!今天我们来深入探讨一下Kafka这个强大而复杂的数据流平台。Kafka被广泛应用于高吞吐量、低延迟的数据流应用场景中。那么,我…

名校介绍|英国六所红砖大学

​近年来由于美国的拒签率增加&#xff0c;很多公派申请者&#xff0c;尤其是CSC资助的访问学者、公派联合培养学生及博士后研究学者&#xff0c;把出国目标改为其它发达国家&#xff0c;尤以英国居多&#xff0c;本文知识人网小编就重点介绍六所英国红砖大学。 我们在“英国大…

Standalone原理讲解与实操演示

这课的一个学习的话&#xff0c;我们基本上了解了flink对不同的一个集群资源管理器上的一个支持&#xff0c;以及我们的一个net ude部署模式上面的一个特点的一些个了解。通过本课的学习&#xff0c;我们将去逐步去了解一下flink on standard allow的这种集群部署模式上面的一个…

基于JSP技术的固定资产管理系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPServlet 工具&#xff1a;MyEclipse、Tomcat 系统展示 首页 注册界面…

RocketMQ的安装和原理

.RocketMQ的安装 一.RocketMQ安装 1.1.下载RocketMQ 下载地址&#xff1a;http://rocketmq.apache.org/release_notes/release-notes-4.2.0/ 下载后解压 Bin : 可执行文件目录 config&#xff1a;配置文件目录 Lib : 依赖库&#xff0c;一堆Jar包 1.2.配置ROCKETMQ_HOME…

uniapp中Error: project.configjson: libVersion 字段需为 string. string

错误如下 找到manifestjson文件到源码视图 添加这段代码"libVersion": "latest",即可

众爱宠物开源项目介绍

众爱宠物管理系统是一个集会员管理、宠物管理、商品管理、库存管理、数据管理、收银管理、多门店管理等功能于一体的综合管理系统&#xff0c;具有操作方便、简单、安全等优点。 开源项目地址

Nacos2.2.3默认无需登录,配置中开启验证不生效

Nacos由于反序列化漏洞&#xff0c;需要升级到2.2.3。 升级后发现不需要登录就可以进行操作&#xff0c;出于安全考虑&#xff0c;需要开启验证。 按照网上的方法进行配置后&#xff0c;重启Nacos仍然不需要登录。 最后发现是我们使用的集成框架默认在代码中关闭了开关&#xf…

基于STM32和人工智能的智能仓储管理系统

目录 引言环境准备智能仓储管理系统基础代码实现&#xff1a;实现智能仓储管理系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景&#xff1a;智能仓储管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓储管理系统通过结合STM32嵌…

Hadoop 2.0 大家族(二)

目录 三、Hbase&#xff08;一&#xff09;Hbase简介&#xff08;二&#xff09;Hbase入门 四、Pig&#xff08;一&#xff09;Pig简介&#xff08;二&#xff09;Pig入门 三、Hbase Hbase是基于Hadoop的开源分布式数据库&#xff0c;它以Google的BigTable为原型&#xff0c;设…

小程序项目业务逻辑回忆3

1.用户激活票劵 在我的票劵未激活票劵查询业务中,票劵是可以通过激活按钮进行激活的 该业务涉及3个表users用户信息表\order_items门票订单关联表\signin_records签到信息表 用户激活票劵时,首先使用该用户user_id创建signin_record表,signin_record表中门票类型ticket_type…

天地图(二)引入地图

1、在public下的index.html中引入天地图 <script src"http://api.tianditu.gov.cn/api?v4.0&tk你的密钥"></script> 2、在vue文件中写入 <template><div:id"mapDiv currentIndex"class"map"style"position: a…