当前位置: 首页 > 知识库问答 >
问题:

Spring Boot@RestController,在@RequestBody中反序列化集合时允许MismatchedInputException

苍兴怀
2023-03-14

我正在尝试实现一个endpoint,它通过@requestbody接受列表 并支持部分处理/容错。

如中所示,即使某些元素错误(甚至可能是不同的类型,但仍然有效的JSON),也要丢弃它们并继续下一个元素,而不是抛出异常并迅速失败。

我已经在对每个元素以编程方式调用验证器,而不是使用@valid,但是每当我接收到具有不同模式或类型的东西时,我就会得到一个com.fasterxml.jackson.databind.exc.MismatchedInputException

我如何才能将这个行为更改为不失败,而是忽略并处理下一个元素呢?

我使用的是Spring Boot2.2.3.release

我尝试使用@JsonIgnoreProperties(ignoreUnknown=true),但当我接收到非对象类型时,仍然会抛出异常。

[
    null,
    [],
    {},
    -1,
    false,
    "Test",
    { "someKey": "someValue" }
]

共有1个答案

劳麒
2023-03-14

我将为Spring创建一个自定义反序列化程序:

如何提供带有Jackson和Spring Boot的自定义反序列化器

然后,在我的反序列化器中,我会将JSON字符串处理成一个通用的JSON数组,并循环遍历它,试图反序列化数组中的每个项。

 类似资料:
  • 我有这个枚举: 控制器中的此方法: 在客户端,我使用angularJS使用http服务使用上述方法,如下所示: 但我在服务器中遇到此异常: .w.s.m.s.DefaultHandlerExceptionResolver:无法读取HTTP消息:org。springframework。http。转换器。HttpMessageTreadableException:无法读取文档:无法反序列化模型实例。乌

  • 我的JSON字符串是: 我想要实现的是,当JSON中没有提供schemaVersion时,能够在默认情况下反序列化到SubClassV1,但即使在Superclass中将schemaVersion初始化为“1.0”时,我仍然会收到以下错误:

  • 我有一个程序有很多数据对象。每种方法都实现了可比性,并设置为从最高到最低(基于简单的长值)排序,包括重复的值。我希望这些对象存储在一个集合/列表中,这样我就可以遍历它,并在其各自的位置取出每个对象。 我已经研究过使用树集,但是这不允许重复,因此只保留具有相同值的多个对象中的一个。然后我找到了TreeMultiset,它可以保持元素具有相同的值。唯一的问题是,它只是存储同一对象的副本,而不是多个相等

  • 我使用带有WebFlux的Spring boot 2.0.1作为Rest服务器。 在我RestController我想自动反序列化一个对象(产品)。但是我得到一个杰克逊错误,好像参数名称模块没有注册。 原因:com.fasterxml.jackson.databind.exc.Invalid定义异常:无法构建的实例(没有像默认构造一样的Creator):无法从对象值(没有基于委托或属性的Creat

  • 我想读入id,但不想在读入后设置它。在读取文件并反序列化时设置\u处理变量,以便可以对其进行设置。有没有一种内置的更优雅的处理方式?

  • 包装com.company;进口java.io.*; 导入静态com。公司主要的磁盘 公共类存储系统{private static final String FILE_NAME=“D:/Songs.data”; } 无法序列化/反序列化。我有一个应该写入文件然后输出的歌曲列表。我不明白为什么它只读取一首歌。 档案:�Øsrcom。公司歌曲“Ї……ј04јJ L genget Ljava/lang