当前位置: 首页 > 面试题库 >

杰克逊在反序列化时抛出JsonMappingException;需要单字符串构造函数?

邢昊焜
2023-03-14
问题内容

另一个问题,但与此相关:使用Jackson来 反序列化JSON-为什么JsonMappingException“没有合适的构造函数”?

这次我遇到了另一个错误,即Jackson解串器抱怨类ProtocolContainer中没有“单字符串构造器/工厂方法”。

但是,如果我添加一个单字符串构造函数,如下所示:

public ProtocolContainer(String json) {}

异常确实消失了,但是ProtocolContainer我希望存在的所有异常都为“空”,即其所有属性都处于其初始状态,并且没有根据JSON字符串进行填充。

这是为什么?

我很确定您不需要单字符串构造函数,如果这样做,则不必填充该构造函数中的属性,对吗?

=)


问题答案:

哦,所以我在发布此问题后再次找到了答案(即使在发布之前尝试了很多事情)。

我要做的就是使用@JsonCreator注释。我简单地注释了我的静态Create方法,如下所示:

@JsonCreator
public static ProtocolContainer Create(String jsonString)
{

    ProtocolContainer pc = null;
    try {
        pc = mapper.readValue(jsonString, ProtocolContainer.class);
    } catch (JsonParseException|JsonMappingException|IOException e) {
        // handle
    }

    return pc;
}

然后问题解决了。



 类似资料:
  • 在我的Spring开机项目中,我注意到了杰克逊奇怪的行为。我在网上搜索了一下,找到了该做什么,但还没找到原因。 用户收件人: 添加新用户效果很好。 TagDto: 尝试添加新标记以错误结束: com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造TagDto的实例(尽管至少存在一个创建者):无法从对象值反序列化(没有基于委托

  • 问题内容: 我正在使用Jackson示例代码对POJO进行反序列化: 这行抛出一个NoSuchMethodError: 我不明白 问题答案: 我猜您的Jackson JAR不同步。本类是JAR,和类是在。 确保它们都是相同的版本。

  • 问题内容: 我有一个这样的模型: 例如,我从远程获取以下JSON: 当我反序列化此JSON时,and 变量将获得正确的值。但是我不想解释我变量的内容。相反,我希望它是以下字符串: 之后,我将自己解释。我如何获得的价值? 问题答案: Jackson问题596是为原始问题中描述的所需功能而创建的。如果要实施它,请投票。 当前可用的解决方案是实现自定义反序列化处理。 另外,如何使用Jackson将原始J

  • Java Jackson能否将一个json字符串date反序列化成Java Long字段(从epoch开始的毫秒数)? 这是一个要反序列化的json字段的示例: 这是Java类中的同一字段,带有当前注释: 但是,发生异常: com . faster XML . Jackson . databind . exc . invalidformatexception:无法从字符串“2022-01-02T0

  • 我在我的项目中使用FasterXML/Jackson Databind已经有一段时间了,一切都很顺利,直到我发现这篇文章并开始使用这种方法对没有@JsonProperty注释的对象进行序列化。 问题是,当我有一个接受多个参数并使用@JsonCreator注释装饰这个构造函数时,Jackson会抛出以下错误: 我已经创建了一个小项目来说明这个问题,我试图对这个类进行序列化: 反序列化代码如下: 我已

  • 问题内容: 我有一个有时看起来像这样的对象: 有时看起来像这样: 这些类如下所示: 第一种情况是第二种情况的简写。我想总是反序列化为第二种情况。 此外- 这是我们代码中非常常见的模式,因此我希望能够以通用方式进行序列化,因为与上述类似的其他类具有将String用作语法糖的相同模式。更复杂的对象。 我以为使用它的代码看起来像这样 如何编写可同时处理两种情况的自定义解串器(或其他模块)? 问题答案: