Salut à tous j'ai commencé à me mettre a GAE pour faire une api mais la je bloque.
J'ai 2 entités une Personnage et Arme (comme dans le tutoriel ) .
J'ai donc créer un api qui permet d'ajouter une arme dans le DataStore.
J'ai donc tester de l'écrire en dur puis ensuite récuperer la liste pour voir si les données on bien été sauvegarder. Le problème c'est qu'il ma sauvegardé que les attributs "Epee" et 33 . L'object Key<Personnage> il ne la pas sauvergardé...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 @Api(name = "arme", version = "v1.01", scopes = { Constants.EMAIL_SCOPE }, clientIds = { Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID, Constants.IOS_CLIENT_ID }, audiences = { Constants.ANDROID_AUDIENCE }) public class ArmeAPI { @ApiMethod(name = "add") public Arme addArme(Arme a) { Personnage p = new Personnage("kalagan",3); Key<Personnage> r = ofy().save().entity(p).now(); Arme arme = new Arme("Epee", 33,r); arme.setParent(r); Key<Arme> result = ofy().save().entity(arme).now(); return ofy().load().key(result).now(); } @ApiMethod(name = "list") public List<Arme> getArmeList() { return ofy().load().type(Arme.class).list(); } }
Voici les 2 classes:
Personnage:
Arme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 @Entity @Index public class Personnage { @Id String id; @Unindex String nom; int niveau; int vie; private Personnage() {} public Personnage (String nom, int niveau) { this.id = nom; this.nom = nom; this.niveau = niveau; this.vie = 100; } }
NB: je suis obligé de mettre @ApiResourceProperty(ignored = AnnotationBoolean.TRUE). Sinon j'ai cette erreur: Parameterized type com.googlecode.objectify.Key<com.workfel.testapi.entity.Personnage> not supported.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 @Entity public class Arme { @Id Long id; @Parent Key<Personnage> parent; String nom; int degats; private Arme() { } public Arme(String nom, int degats, Key<Personnage> parent) { this.nom = nom; this.degats = degats; this.parent = parent; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } @ApiResourceProperty(ignored = AnnotationBoolean.TRUE) public Key<Personnage> getParent() { return parent; } @ApiResourceProperty(ignored = AnnotationBoolean.TRUE) public void setParent(Key<Personnage> parent) { this.parent = parent; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public int getDegats() { return degats; } public void setDegats(int degats) { this.degats = degats; } }
De plus dans ma methode REST addArme je demande un object arme en entré.
Donc dans mon body POST j'ai ça:
Mais quand je debug à la ligne le parametre a (Arme) de la méthode . Je n'ai pas l'attribut parent qui est setter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 { "degats": 44, "nom": "arrow", "parent" : { "id" : "test", "nom": "le nom", "niveau" : 1, "vie" : 9 } }
Seulement degats et nom...
Avez vous des idées ?
Merci d'avance
Partager