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

DynamoDB执行put操作报错需@DynamoDBTyped或@DynamoDBTypeConverted,get/delete正常如何解决

问题排查步骤
  • 检查实体类访问权限:你提供的Test1类为默认包访问权限,DynamoDBMapper序列化对象时无法正确识别非public类的属性映射规则,读操作仅需要反射给字段赋值因此不受影响,写操作触发序列化校验就会报错。
  • 检查getter/setter冲突:你使用Groovy开发,Groovy默认会自动给类的私有字段生成public getter/setter,你同时手写了包访问权限的getter/setter,导致DynamoDBMapper扫描到重复的属性访问器,误判属性为不支持的未知类型。
  • 检查注解作用位置:你将DynamoDB相关注解全部加在包访问权限的getter方法上,Mapper无法扫描到非public的getter方法,也就无法识别属性的映射规则。
解决方案

方案1:调整访问权限和getter/setter逻辑

将实体类改为public,要么删除手写的getter/setter直接用Groovy自动生成的,要么把手写的getter/setter改为public权限,参考代码如下:

@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName = "test1")
public class Test1{

    private String prime
    private String lastname

    @DynamoDBHashKey(attributeName = "prime")
    public String getPrime() {
        return prime
    }

    public void setPrime(String prime) {
        this.prime = prime
    }

    @DynamoDBAttribute(attributeName = "lastname")
    public String getLastname() {
        return lastname
    }

    public void setLastname(String lastname) {
        this.lastname = lastname
    }

    @Override
    public String toString() {
        return "Test1 [prime=" + prime + ", lastname=" + lastname +"]"
    }
}

方案2:注解直接加在字段上

给类添加@DynamoDBDocument注解,直接将所有DynamoDB相关注解加在字段上,不需要单独配置getter方法,参考代码如下:

@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName = "test1")
@DynamoDBDocument
public class Test1{

    @DynamoDBHashKey(attributeName = "prime")
    private String prime

    @DynamoDBAttribute(attributeName = "lastname")
    private String lastname

    @Override
    public String toString() {
        return "Test1 [prime=" + prime + ", lastname=" + lastname +"]"
    }
}

方案3:显式指定字段类型

如果以上方案都不生效,可以在字段上添加@DynamoDBTyped注解显式声明DynamoDB属性类型,参考代码如下:

@DynamoDBHashKey(attributeName = "prime")
@DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.S)
private String prime

@DynamoDBAttribute(attributeName = "lastname")
@DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.S)
private String lastname

内容的提问来源于stack exchange,提问作者sai chand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:06:01