I have a DynamoDB table that I need to read/write to. I am trying to create a model for reading and writing from DynamoDB with Kotlin. But I keep encountering com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: MyModelDB[myMap]; could not unconvert attribute
when I run dynamoDBMapper.scanPage(...)
. Some times myMap
will be MyListOfMaps
instead, but I guess it's from iterating the keys of a Map.
My code is below:
@DynamoDBTable(tableName = "") // Non-issue, I am assigning the table name in the DynamoDBMapper
data class MyModelDB(
@DynamoDBHashKey(attributeName = "id")
var id: String,
@DynamoDBAttribute(attributeName = "myMap")
var myMap: MyMap,
@DynamoDBAttribute(attributeName = "MyListOfMapItems")
var myListOfMapItems: List<MyMapItem>,
) {
constructor() : this(id = "", myMap = MyMap(), myListOfMaps = mutableListOf())
@DynamoDBDocument
class MyMap {
@get:DynamoDBAttribute(attributeName = "myMapAttr")
var myMapAttr: MyMapAttr = MyMapAttr()
@DynamoDBDocument
class MyMapAttr {
@get:DynamoDBAttribute(attributeName = "stringValue")
var stringValue: String = ""
}
}
@DynamoDBDocument
class MyMapItem {
@get:DynamoDBAttribute(attributeName = "myMapItemAttr")
var myMapItemAttr: String = ""
}
}
I am using the com.amazonaws:aws-java-sdk-dynamodb:1.11.500
package and my dynamoDBMapper
is initialised with DynamoDBMapperConfig.Builder().build()
(along with some other configurations).
My question is what am I doing wrong and why? I have also seen that some Java implementations use DynamoDBTypeConverter
. Is it better and I should be using that instead?
Any examples would be appreciated!