技术标签: spring boot springboot技术 java常用插件使用 jackson 解析json字符串
1、ObjectMapper属于jackson库的一部分,JSONObject属于alibaba的fastjson,两者各有优劣,可根据自己的系统环境选择使用哪种技术。
2、目前来看,Jackson社区相对活跃,Spring MVC和Spring Boot都默认使用Jackson。
核心主要有三个部分:
jackson-core(核心包)、jackson-databind(数据绑定包)、jackson-annotations(注解包)
3、依赖包不同
//JSONObject依赖包
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.42</version>
</dependency>
//ObjectMapper依赖包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
ObjectMapper通过writeValue()实现序列化,通过readValue()实现反序列化。
ObjectMapper通过Feature枚举类,初始化了很多的默认配置。
spring-boot-starter-web包中包含了jackson包,不需要单独导入
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.17</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.txc</groupId>
<artifactId>objectmapper</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>objectmapper</name>
<description>objectmapper</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
案例中使用lombok注解生成get和set方法,也可以直接写get和set方法
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {
private String stu_id;
private String stu_name;
}
/**
* 实现对象和JSON之间互转
*/
@RequestMapping("/jsonObjectChange")
@ResponseBody
public void jsonObjectChange() throws Exception{
ObjectMapper mapper = new ObjectMapper();
String param = "{\"stu_id\":\"1001\",\"stu_name\":\"晓春\",\"stu_sex\":\"男\",\"stu_age\":\"34\",\"stu_addr\":\"安徽合肥\",\"stu_pwd\":\"123456\"}";
//将字符串转换为对象—反序列化过程
Student student = mapper.readValue(param, Student.class);
System.out.println("===json转对象==="+student.toString());
//将对象转化成JSON—序列化过程
String json = mapper.writeValueAsString(student);
System.out.println("===对象转json==="+json);
}
/**
* 集合和JSON相互转化
*/
@RequestMapping("/listAndJSONChange")
@ResponseBody
public void arrayToObject() throws Exception{
Student student1=new Student("1001","晓春1","男","34","安徽合肥","123456");
Student student2=new Student("1002","晓春2","男","34","安徽合肥","123456");
ObjectMapper mapper = new ObjectMapper();
//集合转json
String param = mapper.writeValueAsString(Arrays.asList(student1,student2));
System.out.println("==集合转json=="+param);
//数组json转化成集合
List<Student> list= mapper.readValue(param, List.class);
System.out.println("==数组json转集合=="+list);
}
/**
* map和json相互转化
*/
@RequestMapping("/mapAndJsonChange")
@ResponseBody
public void mapAndJsonChange() throws Exception{
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = new HashMap<>();
map.put("id", "1001");
map.put("name","晓春");
map.put("student", new Student("6","6","6","6","6","6"));
String param = mapper.writeValueAsString(map);
System.out.println("===map转json==="+param);
Map<String, Object> resultMap = mapper.readValue(param, Map.class);
System.out.println("===json转map==="+resultMap);
}
使用readTree,通过节点树的方式直接获取JSON属性对应的值
使用链接:https://blog.csdn.net/tangshiyilang/article/details/134326627
方便使用,一次性配置,会在springboot工程启动的时候自动获取配置
@Configuration
public class ObjectMapperConfig {
@Bean("objectMapper")
public ObjectMapper getObjectMapper(){
ObjectMapper mapper = new ObjectMapper();
//属性为NULL 不序列化
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//属性为默认值不序列化
mapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT);
//反序列化时,遇到未知属性不报错
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//如果是空对象的时候,不抛异常
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
//修改序列化后日期格式
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
return mapper;
}
}
问题的json样式:String param="{'stu_id':'1001','stu_name':'晓春'}";
默认支持的是双引号,在很多的环境中都是。
解决博客地址:https://blog.csdn.net/tangshiyilang/article/details/134275584
问题json样式:String param="{stu_id:\"1001\",stu_name:\"晓春\"}";
解决博客地址:https://blog.csdn.net/tangshiyilang/article/details/134281368
问题描述:JSON字符串中出现了属性名称与对象中的名称不一致的情况,而造成的解析错误。
解决博客地址:https://blog.csdn.net/tangshiyilang/article/details/134281585
解决博客地址:解析JSON字符串:属性值为null的时候不被序列化-程序员宅基地
源码需要积分
https://download.csdn.net/download/tangshiyilang/88512083
文章浏览阅读755次,点赞19次,收藏14次。此外,在对比实验中,我们的方法超越了最先进的深度学习网络,凸显了我们提出的方法的有效性。与现有产品的比较分析,包括 2020 年 30 mGlobeLand30(Junetal.,2014 年)、2020 年 10 m Esri土地覆被图(Karra et al.,2021 年)、2020年10 m ESA 世界覆被图(Zanagaetal.,2021 年)、1 m 国家尺度土地覆被图(SinoLC- 1m)(Lietal、 2023)、2m城市树木覆盖数据集(UTC-2m)(Heetal)。
文章浏览阅读478次。依赖版本Caused by: java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer; at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(S..._caused by: java.lang.abstractmethoderror: org.mybatis.spring.transaction.spr
文章浏览阅读298次。图像增强是一种广泛应用于图像处理领域的技术,其主要目的是通过调整图像的亮度、对比度、清晰度等参数,使得图像在视觉上更加清晰、明亮、易于观察和分析。在实际应用中,图像增强可以用于改善图像质量、提高图像的视觉效果、增强图像的细节等等,因此在医学影像、航空航天、安全监控等领域有着广泛的应用。基于对比度受限自适应直方图均衡算法(CLAHE)是一种图像增强算法,它可以动态地调整图像的对比度,以提高图像的视觉效果和清晰度。本文将详细介绍基于CLAHE的图像增强算法,包括算法原理、实现方法、优缺点以及应用举例等方面。_限制对比度直方图均衡matlab
文章浏览阅读1k次。目录1 项目风险管理概述2 规划风险管理3 识别风险4 实施定性风险分析5 实施定量风险分析6 规划风险应对7 实施风险应对8 监督风险1 项目风险管理概述项目风险管理的目标在于提高正面风险的概率和(或)影响,降低负面风险的概率和(或)影响,从而提高项目成功的可能性。_项目风险临近
这篇文章介绍了如何使用Java语句来判断数组中的最大值。通过遍历数组,逐个比较元素大小并更新最大值,最后输出结果。
文章浏览阅读1.4k次,点赞10次,收藏9次。此外,网络加速器还可以对请求进行优化,例如重排请求的顺序,减少请求的数量,减少响应中的重复数据等,以提高传输速度。例如,网络加速器可以使用TCP加速协议来减少TCP协议的握手延迟和拥塞控制,或者使用智能路由选择算法来选择最佳的网络路径。缓存技术:网络加速器可以使用缓存技术,将常用的数据缓存在本地或者网络加速器的服务器上。总的来说,网络加速器的技术原理主要是通过使用压缩、缓存、请求合并和优化、延迟优化、优化协议和路由选择等技术,来减少数据传输的带宽需求、传输延迟和网络拥塞,从而提高网络传输的速度和性能。_网络加速源代码
文章浏览阅读453次。点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达编者荐语为什么我喜欢Python?对于初学者来说,这是一种简单易学的编程语言,另一个原因:大量开箱即用的第三方库,正是23万个由用户提供的软件包使得Python真正强大和流行。如果你是在手机查看,可以点击右上角的“···”,再选择搜索页面内容即可;电脑端建议用网页打开,Ctrl+F即可。库名称简介Chardet字符编码探测器,..._python都有什么库
文章浏览阅读971次。Nik Reisman - 对不起,但我不同意你......在C#中解析midi,C++是大约400行代码的东西......它没有什么困难,也没有困难。在简短的描述解析器将如何工作:1)打开midi字节模式2)阅读标题块,其中有关于大小,轨道数量和重要文件格式的信息!- 有3种格式:0,1,2(类型2实际上是“有价值的”,只有少数这种类型的midi文件,所以如果存在类型2,则不需要读取midi)-..._midi节点如何读写
文章浏览阅读2.4k次,点赞2次,收藏21次。 【转载】什么是Reeds-Shepp曲线? 想象你下班开车回家,到了小区后想把车停到你个人的停车位里面。作为一个喜欢追求挑战的老司机,你想找一条最短的路径把车停进去。那么这样的路径是什么呢?答案..._reeds shepp 是最短路径么
文章浏览阅读1k次,点赞18次,收藏15次。需求说明书是否已包括了主要的质量属性,例如有效性、高效性、灵活性、完整性、互操作性、可靠性、健壮性、可用性、可维护性、可移植性、可重用性和可测试性等。操作界面的设计是否有为用户考虑(例如:词汇、使用信息和进入的简易)是否能够对该套系统进行测试、演示、分析或检查来说明它是满足需求的。是否已详细说明了软件环境(共存的软件)和硬件环境(特定的配置)该设计是否反映了实际操作环境(硬件、软件、支持软件)从功能、成果、进度、预算和技术角度上看该设计是否可行。是否所有的假设、约束、策略及依赖都被记录在本文档了。_需求规格说明书检查表
文章浏览阅读2.6k次,点赞4次,收藏9次。VMware虚拟机搭建Centos7,并配置网卡,实现远程连接_vmware workstation centos 7 网卡配置
文章浏览阅读1.4w次,点赞5次,收藏70次。文章目录Output formatsPDFHTMLOutput formatsRMarkdown通过knitr来将代码块运行并与.Rmd文件中文本内容合并生成.md文件后通过Pandoc这个强大的工具再转换成不同的格式,已经支持的格式已经有这么多啦:beamer_presentationgithub_documenthtml_documentioslides_prese..._rmarkdown转出pdf总是html形式