À l'aide de json avec la Play 2
Je suis en train de créer une application simple qui me permet de créer, lire, mettre à jour et supprimer des différents utilisateurs. J'ai une INTERFACE utilisateur de base, vue, contrôleur et le modèle de travail, mais je voulais être plus avancé que ce et de fournir une bonne interface json.
Cependant, en dépit de lire tout ce que je peux trouver dans la pièce 2 de la documentation, de la Play 2 groupes Google et le site stackoverflow, je ne peux toujours pas obtenir que cela fonctionne.
J'ai mis à jour mon contrôleur basé sur les précédents commentaires et je crois qu'il est basé sur la documentation.
Voici ma mise à jour du contrôleur:
package controllers;
import models.Member;
import play.*;
import play.mvc.*;
import play.libs.Json;
import play.data.Form;
public class Api extends Controller {
/* Return member info - version to serve Json response */
public static Result member(Long id){
ObjectNode result = Json.newObject();
Member member = Member.byid(id);
result.put("id", member.id);
result.put("email", member.email);
result.put("name", member.name);
return ok(result);
}
//Create a new body parser of class Json based on the values sent in the POST
@BodyParser.Of(Json.class)
public static Result createMember() {
JsonNode json = request().body().asJson();
//Check that we have a valid email address (that's all we need!)
String email = json.findPath("email").getTextValue();
if(name == null) {
return badRequest("Missing parameter [email]");
} else {
//Use the model's createMember class now
Member.createMember(json);
return ok("Hello " + name);
}
}
....
Mais lorsque je l'exécute, j'obtiens l'erreur suivante:
incompatible types [found: java.lang.Class<play.libs.Json>] [required: java.lang.Class<?extends play.mvc.BodyParser>]
In /Users/Mark/Development/EclipseWorkspace/ms-loyally/loyally/app/controllers/Api.java at line 42.
41 //Create a new body parser of class Json based on the values sent in the POST
42 @BodyParser.Of(Json.class)
43 public static Result createMember() {
44 JsonNode json = request().body().asJson();
45 //Check that we have a valid email address (that's all we need!)
46 String email = json.findPath("email").getTextValue();
Aussi loin que je peux dire, j'ai copié à partir de la la documentation donc j'apprécierais toute aide dans l'obtention de ce travail.
OriginalL'auteur mstreffo | 2012-05-06
Vous devez vous connecter pour publier un commentaire.
Il semble y avoir des conflits dans l'usage de la
Json
classe dans la pièce 2 de la documentation. Pour obtenir l'exemple ci-dessus fonctionne correctement, les importations suivantes sont utilisées:Note l'appel explicite du droit
Json
classe dans@BodyParser
Je ne suis pas sûr si c'est un bug ou pas? Mais c'est la seule façon que j'ai pu obtenir l'exemple de travailler.
OriginalL'auteur mstreffo
Importation de ces deux
Selon cette documentation: http://fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/fasterxml/jackson/databind/node/ObjectNode.html
OriginalL'auteur greg
Essayez ceci:
OriginalL'auteur Tam Mai
Autant que je sache, le code que vous utilisez n'a pas atteint un officiel de la version du Jeu (ni 2.0 ou 2.0.1) selon cette: https://github.com/playframework/Play20/pull/212
Au lieu de cela, vous pouvez le faire (pas testé):
OriginalL'auteur ndeverge
Avez-vous essayez de vérifier le la documentation?
Servant une réponse JSON ressemble:
j'ai suivi l'exemple ci-dessus, mais pour une raison que j'obtiens l'erreur suivante: "impossible de trouver le symbole: la classe Json" - j'ai importé le jeu.libs.Json dans mon contrôleur d'application. Quelqu'un peut-il aider?
J'ai révisé mon code source et je suis maintenant obtenir un nouveau message d'erreur (voir mise à jour le contenu de la question ci-dessus)
OriginalL'auteur Anthony
Vous avez importé
play.libs.Json
et ensuite utiliser leBodyParser.Of
annotation avec cetteJson.class
.Ci-dessus annotation s'attend à une classe qui étend un
play.mvc.BodyParser
. Donc, il suffit de remplacer@BodyParser.Of(Json.class)
par@BodyParser.Of(BodyParser.Json.class)
.OriginalL'auteur Victor