J'ai des difficultés à utiliser dynamodbmapper d'Amazon dans le code Scala. Le point de collage principal consiste à reconnaître la JVM pour reconnaître @Dynamodbhashashashkeke quand il est utilisé dans une classe de cas, comme: p>
Tous les pointeurs de quelqu'un qui a intégré cette bibliothèque client dans un projet Scala? (J'espère que vous n'êtes pas simplement revenir à l'API de bas niveau, bien que cela puisse être une décision décente une fois épuisé mes options avec le mappeur). P> Classe de boîtier MyCoolCaseclass (@dynamodbhashashkey (attributename = "my_id") myID: string) {} code> p> p>
3 Réponses :
Le mappeur Dynamodb utilise la réflexion pour trouver les getters et les setters. Le SDK assume des conventions de style Java, c'est-à-dire que vos getters et vos setters commencent par "GET" ou "IS", et les configurateurs commencent par "SET". Vous pouvez voir le code de réflexion sur GitHub .
J'ai été capable de le faire fonctionner, mais cela ressemble à écrire Java: ( P>
@DynamoDBTable(tableName = "awesome_table") class TheBestClass { private var id : Integer = _ @DynamoDBHashKey def getId() = id def setId(_id: Integer) = id = _id }
Je devais faire cela:
import annotation.meta.beanGetter import beans.BeanProperty import com.amazonaws.services.dynamodbv2.datamodeling._ @DynamoDBTable(tableName="DEMOTAB") case class DemoItem( // it's a case class for the free stuff, but can be ordinary class @(DynamoDBHashKey @beanGetter) // would not work without meta annotation @BeanProperty var id:String, // must be var or mapper can't instantiate one @BeanProperty var number:Integer ) { def this() = this(null, null) // needed by DynamoDB Mapper to instantiate }
@BeanProperty est le moyen «officiel» d'interagir avec toute bibliothèque de réflexion qui vous attend de suivre les conventions JavaBeans.
Merci pour cette réponse très utile! J'ai rencontré des problèmes lorsque vous utilisez des valeurs booléennes. Plus précisément, la ligne @boolantanbeanproperty var rockstar: boolean = true code> va écrire le champ dynamodb
rockstar code> correctement, mais je ne peux pas obtenir la propriété à nommer
Isrokstar code>. Si j'essaie
@boolantanbeanProperty var iSrockstar: boolean = true code>, le mapper écrit les deux
rockstar code> et
isrockstar code>. Ajouter
@dynamodbattribute (attributename = "isrockstar") code> ci-dessus ne vous aide pas non plus. Des pensées?
@JOSHPADNICK Voir le corps de réponse de Matte ci-dessus: Le SDK assume des conventions de style Java, c'est-à-dire que vos getters et vos configuriseurs commencent par "GET" ou "est". Je ne pense pas que vous puissiez nommer votre propriété avec le commencement est code>.
Cela fonctionne pour moi, y compris le boolean code>