【BUG】已解决:JsonMappingException

已解决: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.mfbz.cn/a/794340.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RK3588部署YOLOV8-seg的问题

在使用YOLOV8-seg训练出来的pt模型转为onnx的时候,利用以下仓库地址转。 git clone https://github.com/airockchip/ultralytics_yolov8.git 在修改ultralytics/cfg/default.yaml中的task,mode为model为自己需要的内容后, 执行以下语句 cd …

2006-2021年 291个地级市资源错配指数、劳动和资本相对扭曲指数do文件和结果

资源错配指数:衡量生产要素配置效率的关键指标 资源错配指数(Misallocation Index)是一个衡量资源配置效率的指标,它反映了生产要素是否得到了合理配置,以及是否达到了生产效率的最优状态。一个较高的资源错配指数意味…

视图库对接系列(GA-T 1400)十六、视图库对接系列(本级)通知(订阅回调)

说明 之前我们实现了订阅接口,其中有一个receiveAddr参数, 这个就是对应的回调的地址。一般情况下对应的是同一个服务。 我们推荐使用http://xxx:xxx/VIID/SubscribeNotifications接口文档 SubscribeNotificationList对象对象如下: 文档中是xml,但实际上目前使用的都是jso…

传音控股Android一面凉经(2024)

传音控股Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《传音控股Android一面凉经(2024)》。 面试职位: Android应用开发工程师(移动互联业…

Python酷库之旅-第三方库Pandas(017)

目录 一、用法精讲 41、pandas.melt函数 41-1、语法 41-2、参数 41-3、功能 41-4、返回值 41-5、说明 41-5-1、宽格式数据(Wide Format) 41-5-2、长格式数据(Long Format) 41-6、用法 41-6-1、数据准备 41-6-2、代码示例 41-6-3、结果输出 42、pandas.pivot函数 …

新旧电脑数据转移方法

随着科技的发展和电脑性能的不断提升,许多用户在工作和生活中都需要更换新电脑。当我们购买了一台新电脑后,如何将旧电脑中的数据转移到新电脑上成许多用户关注的问题。本文将详细介绍几种有效的电脑数据转移方法,帮助大家顺利完成数据迁移。…

5G AGV 安全演示:解决新欧盟机器指令挑战

2024 年 2 月 26 日至 2 月 29 日,2024 世界移动通信大会(MWC2024)在西班牙巴塞罗那召开。 这场以「未来先行」为主题的大会,吸引了大量通信领域企业和观众参加,现场盛况空前。 HMS Labs 在与易福门(ifm&am…

07_Shell内置命令-declare

07_Shell内置命令-declare 一、设置变量属性 - 增加属性 取消属性 1.1、设置变量为整形变量 declare -i 变量名 #!/bin/bashage"abc" #设置变量为整形变量,这时候age如果不是整形,则置为0 declare -i age echo $age#并且设置非整形值无效, 只…

不会写提示词的,快下载这个“老六”插件(附插件)

在AI绘画的世界里,每一个细节都至关重要,面对复杂的提示词——SixGod_k插件,只需轻点即可获得提示词,sd-webui中文提示词插件、老手新手炼丹必备。 一、SixGod_k提示词的功能亮点 SixGod_k提示词不仅解决了提示词编写的难题&…

MybatisPlus 核心功能

MybatisPlus 核心功能 文章目录 MybatisPlus 核心功能1. 条件构造器1.1 QueryWrapper1.2 LambdaQueryWrapper(推荐)1.3 UpdateWrapper1.4 LambdaUpdateWrapper 2. 自定义SQL3. Service接口 1. 条件构造器 当涉及到查询或修改语句时,MybatisP…

8、matlab彩色图和灰度图的二值化算法汇总

1、彩色图和灰度图的二值化算法汇总原理及流程 彩色图和灰度图的二值化算法的原理都是将图像中的像素值转化为二值(0或1),以便对图像进行简化或者特定的图像处理操作。下面分别介绍彩色图和灰度图的二值化算法的原理及流程: 1&a…

怎么录制网页上的视频?这篇文章告诉你

在数字化时代,网页视频已成为我们获取信息、学习知识和娱乐放松的重要途径。然而,有时我们可能想要保存或分享网页上的视频内容,却苦于没有合适的工具和方法。那么怎么录制网页上的视频呢?本文将详细介绍两种常见的网页视频录制方…

【基础算法总结】链表

链表 1.链表常用技巧和操作总结2.两数相加4.两两交换链表中的节点4.重排链表5.合并 K 个升序链表6.K 个一组翻转链表 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!&…

一个开源完全免费的无损视频或音频的剪切/裁剪/分割/截取和视频合并工具

大家好,今天给大家分享一款致力于成为顶尖跨平台FFmpeg图形用户界面应用的软件工具LosslessCut。 LosslessCut是一款致力于成为顶尖跨平台FFmpeg图形用户界面应用的软件工具,专为实现对视频、音频、字幕以及其他相关媒体资产的超高速无损编辑而精心打造。…

LabVIEW电子水泵性能测试平台

开发了一种车用电子水泵性能测试平台,该平台以工控机为载体,利用LabVIEW开发上位机软件,采用PLC控制阀门和水泵等电气元件,通过RS485进行数据采集并传输到上位机。通过上位机与下位机的协同控制,实现了数据交互处理和性…

备考美国数学竞赛AMC8和AMC10:吃透1850道真题和知识点

距离接下来的AMC8、AMC10美国数学竞赛还有几个月的时间,实践证明,做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。 通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,…

c语言题目之喝汽水问题

文章目录 一、题目二、思路三、代码实现3.1方法一3.1方法二 一、题目 提示:以下是本篇文章正文内容,下面案例可供参考 二、思路 20元首先可以喝20瓶,此时手中有20个空瓶子两个空瓶子可以喝一瓶,喝完之后,空瓶子剩余&…

跳水板00

题目链接 跳水板 题目描述 注意点 返回的长度需要从小到大排列必须正好使用k块木板0 < shorter < longer0 < k < 100000 解答思路 用k块两种不同的木板&#xff0c;组合数为k 1&#xff0c;最小的组合为全部使用shorter&#xff0c;每多一块longer&#xff0…

前端一面之 同步 vs 异步

异步 vs 同步 先看一下 下面的 demo console.log(100) setTimeout(function () {console.log(200) }, 1000) console.log(300) 执行结果 100 300 200console.log(100) alert(200) // 1秒钟之后点击确认 console.log(300) 这俩到底有何区别&#xff1f;—— 第一个示例中间的…

再度领跑的极兔速递不存在估值缺口?

随着618的尘埃落地&#xff0c;线上零售的最强辅助们也将陆续公布最新业务量数据了。 整体上&#xff0c;上半年国内快递业的需求量维持稳增势。据国家邮政局监测数据&#xff0c;截至6月30日&#xff0c;今年上半年我国快递业务量突破800亿件&#xff0c;比2023年提前59天。其…