Java DynamoDB:在实体类中添加项目而不声明字段

问题描述 投票:0回答:1

以下示例将映射项目并将其添加到 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中添加任何字段,而不被映射到实体。

java spring spring-boot amazon-dynamodb amazon-dynamodb-data-modeling
1个回答
0
投票

尚不清楚您到底想要什么行为,但我相信

DynamoDBIgnore
会满足您的要求:

指示 DynamoDBMapper 实例应忽略关联属性。将数据保存到表时,DynamoDBMapper 不会将此属性保存到表中。

应用于非建模属性的 getter 方法或类字段。如果直接将注解应用于类字段,则必须在同一个类中声明相应的 getter 和 setter

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.Annotations.html#DynamoDBMapper.Annotations.DynamoDBIgnore

© www.soinside.com 2019 - 2024. All rights reserved.