使用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对象。
修改步骤:
- 在
RecordBuilderMixIn中声明与原Record.Builder类里build()方法签名完全一致的抽象方法,让Jackson能找到构建入口。 - 如果原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
相关产品推荐
相关产品推荐

