【BUG】已解决:JsonMappingException

news2024/9/27 15:27:39

已解决:JsonMappingException

欢迎来到英杰社区icon-default.png?t=N7T8https://bbs.csdn.net/topics/617804998

概述:

        没有getter方法的实体的序列化,并解决Jackson引发的JsonMappingException异常。

        默认情况下,Jackson 2只会处理公有字段或具有公有getter方法的字段。如果实体的所有字段都是私有或包内可见的,序列化将会失败:

public class MyDtoNoAccessors {
    String stringValue;
    int intValue;
    boolean booleanValue;

    public MyDtoNoAccessors() {
        super();
    }

    // no getters
}
@Test(expected = JsonMappingException.class)
public void givenObjectHasNoAccessors_whenSerializing_thenException() 
  throws JsonParseException, IOException {
    String dtoAsString = new ObjectMapper().writeValueAsString(new MyDtoNoAccessors());

    assertThat(dtoAsString, notNullValue());
}

完整的异常如下:

com.fasterxml.jackson.databind.JsonMappingException: 
No serializer found for class dtos.MyDtoNoAccessors 
and no properties discovered to create BeanSerializer 
(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )

 

3.1. 全局自动检测任何可见性的字段

        对于这个问题的一个解决方案是全局配置ObjectMapper,使其检测所有字段,不论其可见性:

objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

        这将允许Jackson检测到没有getter方法的私有和包内可见字段,从而实现正确的序列化:

@Test
public void givenObjectHasNoAccessors_whenSerializingWithAllFieldsDetected_thenNoException() 
  throws JsonParseException, IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
    String dtoAsString = objectMapper.writeValueAsString(new MyDtoNoAccessors());

    assertThat(dtoAsString, containsString("intValue"));
    assertThat(dtoAsString, containsString("stringValue"));
    assertThat(dtoAsString, containsString("booleanValue"));
}

3.2. 在类级别控制字段可见性

        Jackson 2还提供了另一种选择,即通过@JsonAutoDetect注解在类级别控制字段可见性:

@JsonAutoDetect(fieldVisibility = Visibility.ANY)
public class MyDtoNoAccessors { ... }

        使用这个注解,这个特定类的序列化现在应该可以正常工作:

@Test
public void givenObjectHasNoAccessorsButHasVisibleFields_whenSerializing_thenNoException() 
  throws JsonParseException, IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    String dtoAsString = objectMapper.writeValueAsString(new MyDtoNoAccessors());

    assertThat(dtoAsString, containsString("intValue"));
    assertThat(dtoAsString, containsString("stringValue"));
    assertThat(dtoAsString, containsString("booleanValue"));
}

4. 在Jackson中禁用fail_on_empty_beans

        在Jackson中,fail_on_empty_beans特性决定了在序列化过程中遇到空对象(没有属性)时是否抛出异常。默认情况下,Jackson会遇到空bean时抛出异常。

        值得注意的是,fail_on_empty_beans特性默认启用,若要禁用它,我们需要明确设置为false。具体方法取决于我们的具体用例。

4.1. 使用ObjectMapper配置

        可以直接在ObjectMapper上禁用fail_on_empty_beans

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

通过这种方式配置ObjectMapper,我们告诉Jackson在序列化过程中遇到空bean时不抛出异常。

4.2. 使用Spring Boot

        在Spring Boot中,我们可以在application.properties文件中设置以下属性以全局禁用fail_on_empty_beans

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

        这个属性可以在应用级别设置,以控制Jackson序列化在整个应用中的行为

   【其他错误】

如果出现模块错误

进入控制台输入:建议使用国内镜像源

pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple

我大致罗列了以下几种国内镜像源:

清华大学
https://pypi.tuna.tsinghua.edu.cn/simple
     
阿里云
https://mirrors.aliyun.com/pypi/simple/
     
豆瓣
https://pypi.douban.com/simple/
     
百度云
https://mirror.baidu.com/pypi/simple/
     
中科大
https://pypi.mirrors.ustc.edu.cn/simple/
     
华为云
https://mirrors.huaweicloud.com/repository/pypi/simple/
     
腾讯云
https://mirrors.cloud.tencent.com/pypi/simple/

【粉丝福利】

更多粉丝福利,关注下方公众号获取

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

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

相关文章

镭速助力全球高速传输,实现点对点高效传输打破时差壁垒!

在当今全球化的背景下,跨国界的文件协作已成为许多跨国企业日常工作的一部分。但是,时差和网络不稳定等因素常常影响团队间的有效交流与合作。特别是在大文件传输环节,传统的在线传输方法在接收方离线或网络条件不佳时显得力不从心&#xff0…

pycharm使用micropython

一、打开设置 2、搜索micropython、安装、重启 3、第5步需要设置成你插的电脑USB口,一个一个试 4、 5、 6、OK

【重大消息】报告称OpenAI的产品可经由微软的服务提供给中国客户

尽管OpenAI正在采取措施限制中国用户访问其平台,但一份最新报告称,中国用户仍可通过微软的Azure云计算平台访问该公司的产品。微软和OpenAI有着密切的合作关系,前者通过人工智能功能获得了独家产品访问权以拓展企业计算。最新的报道来自《The…

全新UI自助图文打印系统小程序源码 PHP后端 附教程

最新自助图文打印系统和证件照云打印小程序源码PHP后端,为用户用户自助打印的服务,包括但不限于文档、图片、表格等多种格式的文件。此外,它们还提供了诸如美颜、换装、文档打印等功能,以及后台管理系统,方便管理员对打…

超市收银系统源码

今天给大家分享一套线上线下打通的收银系统,安卓/win双端线下收银台,可DIY、多模板的三端线上小程序商城,除此之外ERP进销存管理、商品管理、会员营销都很完善。 重点是系统支持OEM贴牌独立部署和全开源源码,非常适合一些正在寻找…

服务器感染了.hmallox勒索病毒,如何确保数据文件完整恢复?

导言: 在当今高度数字化和互联的时代,勒索病毒已经成为网络安全的一个主要威胁。特别是近期出现的.hmallox勒索病毒,以其高效的加密技术和致命的数据锁定能力,引发了广泛关注和担忧。本文91数据恢复将深入探讨.hmallox勒索病毒的…

EEPROM-AT24C02存储器芯片数据读写

一、前言 1.1 功能介绍 在嵌入式系统设计中,数据的存储与读取是至关重要的一环。随着技术的不断发展,对存储设备的性能、容量和可靠性要求也越来越高。EEPROM(电可擦除可编程只读存储器)作为一种非易失性存储介质,以…

ISO 20000认证:驱动企业IT服务管理变革的利器

在信息技术驱动商业发展的今天,企业对高效、可靠和安全的IT服务需求日益增长。ISO 20000作为国际公认的IT服务管理标准,能够帮助企业在竞争激烈的市场环境中脱颖而出,实现IT服务管理的全面提升。本文将深入探讨ISO 20000认证如何帮助企业优化…

idea运行旧的项目如何引入jar包

背景: 有一个旧项目,年份不详, 生产环境运行正常, 生产环境jenkins打包正常;部分jar包为私包,已无法下载 现在要对这个项目进行调试修改 从生产环境下载正常的jar包解压找到lib把lib放到项目目录中 然后选者对应的jdk版本: 一个模块一个模块的 把刚才的库加进去 然后试着启…

免费听书TV版

技术文档摘要 标题: 听书软件用户体验与功能概述 摘要: 本文档提供了一款听书软件的用户体验和功能描述。软件以其稳定性、简洁的用户界面和纯净的用户体验受到用户青睐。文档概述了软件的主要特点、操作便利性以及对遥控器操作的支持。 关键词&#…

仪表板展示|DataEase看中国:2023年中国新能源汽车经济运行情况分析

背景介绍 随着政府机构、企业和个人对环保和可持续发展的高度关注,“新能源汽车”在全球范围内成为了一个热门话题。新能源汽车是指使用非传统燃料(如电能、氢能等)作为动力源的汽车。 在中国市场,新能源汽车产业蓬勃发展&#…

AI数字人直播saas系统源码部署火爆!无人直播系统全攻略

随着直播行业的日益兴盛,各种直播模式和玩法不断涌现。其中,AI数字人直播更是凭借着其在降本增效的独特优势而在众多直播模式中脱颖而出,成为了众多企业已经引进或计划引进的新型技术。而各大数字人源码厂商推出的AI数字人直播saas系统源码部…

uniapp小程序上传文件

需求 小程序需要上传用户相册图片或拍摄的照片到后端服务器 uniapp官方处理小程序文件方法 选择文件方法:uni.chooseMedia uni-app官网uni-app,uniCloud,serverless,uni.chooseVideo(OBJECT),chooseVideo HarmonyOS 兼容性,uni.chooseMedia(OBJECT),uni.saveVid…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十三章 Linux连接档

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【C++报错已解决】Invalid Use of ‘this’ Pointer

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言 一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:修正‘this’指针使用2…

首席数据官CDO,提升城市数字治理能力

随着数字技术的飞速发展,首席数据官(CDO)的角色越来越受到各城市的重视。 不仅企业和机构,城市本身也是巨大的数据生成者。 它们拥有丰富的政府、社会和经济数据资源,这些数据涵盖了城市治理、公共服服务和产业进展等多个方面。 利用这些数…

pytorch- RNN循环神经网络

目录 1. why RNN2. RNN3. pytorch RNN layer3.1 基本单元3.2 nn.RNN3.2.1 函数说明3.2.2 单层pytorch实现3.2.3 多层pytorch实现 3.3 nn.RNNCell3.3.1 函数说明3.3.2 单层pytorch实现3.3.3 多层pytorch实现 4.完整代码 1. why RNN 以淘宝的评论为例,判断评论是正面…

登录谷歌时系统提示“找不到您的Google账号”,原因通常有5个

时不时有朋友问我,说他明明后了谷歌账号,但是在登录谷歌时(有时是自己登录谷歌的网站或者APP,也有的是登录ourplay等加速器、虚拟机等第三方应用),输入了账号后系统却提示说“找不到您的Google账号”&#…

如何在 Odoo 16 中创建名称搜索功能

我们精通 Odoo,了解如何使用关系字段来建立不同模型之间的联系。为了填充这些关系字段,我们经常需要从一整套可用记录中搜索并找到特定值。Odoo 的名称搜索功能简化了此搜索过程,提供了一种根据我们的特定需求自定义搜索的便捷方式。 深入探…

图像识别和目标检测在超市电子秤上的应用

目录 前言深度学习的目标检测图像识别技术视觉秤的优势其他应用场景中的技术应用未来展望 前言 随着科技的不断发展,电子秤在生鲜超市中的应用也在不断升级。传统的电子秤需要打秤人员手动输入秤码,这不仅耗时费力,还需要大量的培训以记住各…