java - DynamoDB 错误插入映射
问题描述
我正在尝试在 AWS DynamoDB 中插入,我得到了插入寄存器,但在 Java (Eclipse) 中出现错误当我插入但重复时,我在 DynamoDB 中看到我的插入表。
我得到错误->
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Aricle[ID_TABLE]: null or empty value for primary key
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.unconvert(DynamoDBMapperFieldModel.java:171)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$ValueUpdate.apply(DynamoDBMapper.java:1440)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:746)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:622)
at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.save(AbstractDynamoDBMapper.java:113)
at org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.save(DynamoDBTemplate.java:136)
at org.socialsignin.spring.data.dynamodb.repository.support.SimpleDynamoDBCrudRepository.save(SimpleDynamoDBCrudRepository.java:130)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
我的类Java
@DynamoDBTable(tableName = "ARTICLE")
public class Article{
@Id
private String ID_TABLE;
private String description;
public Article() {
}
public Article(String description) {
this.description=description;
}
@DynamoDBHashKey(attributeName = "ID_TABLE")
@DynamoDBAutoGeneratedKey
public String getID_TABLE() {
return ID_TABLE;
}
@DynamoDBAttribute(attributeName = "Description")
public String getDescription() {
return description;
}
}
我用主键的空值或空值上传这个,但我得到@DynamoDBAutoGeneratedKey
......
我用 Angular 发送对象文章:
export class Article{
id: string;
description: string;
}
let newParam: Article= {
id: '',
description: 'chair'
};
然后我现在明白我如何发送 '' , @DynamoDBAutoGeneratedKey
不会运行,因为我尝试过
let newParam: Article= {
id: null,
我得到错误 null
com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: null (Service: AmazonDynamoDBv2; Status Code: 407; Error Code: null; Request ID: null)
然后,如果我从 Angular 向 SpringBoot 发送了一个对象,并且 Angular 需要声明 id 这个对象,并且 Springboot 的对象获取了这个对象,我如何生成密钥?
使用新数据进行编辑。
我得到对象
控制器:
@RequestMapping(method = RequestMethod.POST, value = "/addParam", produces = MediaType.APPLICATION_JSON_VALUE)
public MyMessage addParam(@RequestBody Article article) {
try {
pgRepository.save(article);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
}
存储库:
public interface Article Repository extends CrudRepository<Article , String> {
}
解决方案
添加 @DynamoDBAutoGeneratedKey 注释后,哈希键或范围键属性将自动生成。对象持久性模型将在保存这些属性时生成随机 UUID。只有字符串属性可以标记为自动生成的键。
在您调用 save 方法将其保存在数据库中之前,此键将为空。当您调用 save 时,API 将生成一个 UUID 并保存在数据库中,并将其设置到您的对象中。
代码片段将是:
public static void saveItem() {
Article obj = new Article();
obj.setDescription("abc123");
// ID_TABLE field is null at this point
DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient);
mapper.save(obj);
// ID_TABLE field will have a value at this point
System.out.println("Object was saved with id " + obj.getID_TABLE());
}
我希望这有帮助。
推荐阅读
- android - 底部导航栏的自定义图像
- vue-component - nativescript-vue 无法读取生命周期挂钩中的数据属性
- swift - CollectionView 不更新可见单元格
- java - 试图确定如何从控制台读取长度可能超过 10,000 个字符的输入
- node.js - 访问容器内服务的端口问题
- reactjs - React 测试渲染器 Act 函数
- three.js - Raycast 找到与 z 轴相交为零的点
- ajax - 如何使用javascript在div内显示ajax成功响应
- c# - UWP - 这个有界属性是否在 UI 上下文上运行?
- javascript - React 避免重新渲染 useState