以下示例将映射项目并将其添加到 DynamoDB 表中。我认为 NoSQL 的目的是允许字段无需在数据结构实体中指定结构/类型。
如何在不指定实际 EntityType 的情况下将字段添加到 DynamoDB 中? (在本例中为“Person”实体类)。更喜欢设置 Postman 以允许随机 Json 元素。
DynamoDBConfig
@RequiredArgsConstructor
@Configuration
public class DynamoDbConfig {
@Bean
public DynamoDBMapperConfig dynamoDBMapperConfig() {
return DynamoDBMapperConfig.DEFAULT;
}
@Bean
public DynamoDBMapper mapper() {
return new DynamoDBMapper(amazonDynamoDBConfig());
}
@Bean
public AmazonDynamoDB amazonDynamoDBConfig() {
return AmazonDynamoDBClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("dynamodb.us-west-2.amazonaws.com", "us-west-2"))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("TestExample", "ExampleExample")))
.build();
}
}
实体
@Data
@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName="person")
public class Person implements Serializable {
@DynamoDBHashKey(attributeName = "personId")
@DynamoDBAutoGeneratedKey
private String personId;
@DynamoDBAttribute
private String name;
@DynamoDBAttribute
private int age;
@DynamoDBAttribute
private String email;
}
控制器:
@RestController
@RequestMapping("/api")
@CrossOrigin
public class PersonController {
private PersonRepository repository;
@Autowired
public PersonController(PersonRepository repository) {
this.repository = repository;
}
@PostMapping("/savePerson")
public Person savePerson(@RequestBody Person person) {
return repository.addPerson(person);
}
}
存储库:
@Repository
public class PersonRepository {
private DynamoDBMapper mapper;
@Autowired
public PersonRepository(DynamoDBMapper mapper) {
this.mapper = mapper;
}
public Person addPerson(Person person) {
mapper.save(person);
return person;
}
}
在Postman中测试:
最终想要在这个Json中添加任何字段,而不被映射到实体。
尚不清楚您到底想要什么行为,但我相信
DynamoDBIgnore
会满足您的要求:
指示 DynamoDBMapper 实例应忽略关联属性。将数据保存到表时,DynamoDBMapper 不会将此属性保存到表中。
应用于非建模属性的 getter 方法或类字段。如果直接将注解应用于类字段,则必须在同一个类中声明相应的 getter 和 setter