You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jackson序列化/反序列化DynamoDB Record类遇构建方法错误求助

问题:Jackson Mixin处理DynamoDB Record类反序列化报错

我需要用Jackson对DynamoDB的Record类进行序列化/反序列化操作,但无法修改该类,因此采用Jackson Mixin实现,具体代码如下:

@JsonDeserialize( builder = RecordBuilderMixIn.class )
private abstract static class RecordMixIn
{
}

@JsonPOJOBuilder( withPrefix = "" )
private abstract class RecordBuilderMixIn
{
}

var mapper = new ObjectMapper()
                .addMixIn( Record.Builder.class, RecordBuilderMixIn.class )
                .addMixIn( Record.class, RecordMixIn.class );

执行mapper.readValue(json, Record.class);时,出现如下错误:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Builder class `com.surecloud.jackson.RecordObjectMapper$RecordBuilderMixIn` does not have build method (name: 'build')

解决方法

Jackson基于Builder模式反序列化时,要求Builder类必须提供一个生成目标实例的构建方法(默认名为build)。你的RecordBuilderMixIn是抽象类且未声明该方法,导致Jackson无法识别如何构建Record对象。

修改步骤:

  1. 在RecordBuilderMixIn中声明与原Record.Builder类里build()方法签名完全一致的抽象方法,让Jackson能找到构建入口。
  2. 如果原Builder类的构建方法不是默认的build,可以通过@JsonPOJOBuilder的buildMethodName属性指定方法名。

修改后的代码示例:

@JsonDeserialize( builder = RecordBuilderMixIn.class )
private abstract static class RecordMixIn
{
}

@JsonPOJOBuilder( withPrefix = "" )
private abstract class RecordBuilderMixIn
{
    // 声明与原Record.Builder的build方法匹配的抽象方法
    public abstract Record build();
}

var mapper = new ObjectMapper()
                .addMixIn( Record.Builder.class, RecordBuilderMixIn.class )
                .addMixIn( Record.class, RecordMixIn.class );

特殊情况处理

如果原Record.Builder的构建方法名为create而非build,只需调整@JsonPOJOBuilder注解:

@JsonPOJOBuilder( withPrefix = "", buildMethodName = "create" )
private abstract class RecordBuilderMixIn
{
    public abstract Record create();
}

内容的提问来源于stack exchange,提问作者kylie.zoltan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:40:22