2016-03-26 5 views
0

Ich versuche, Post-Methode von PostMan aufrufen, aber nicht in der Lage zu nennen.Post Methode funktioniert nicht mit Class Object in Play 2.5

Controller-Datei:

public class UserController extends Controller{ 

    public Result getAll() { 
     List<User> users = new ArrayList<User>(); 
     users.add(new User("Vinit", "[email protected]", 25)); 
     users.add(new User("Jaimin", "[email protected]", 25)); 
     return ok(Json.toJson(users)); 
    } 

    public Result get(Long id) { 

     User user = new User(); 
     user.setId(id); 
     user.setName("Vinit"); 
     user.setEmail("[email protected]"); 
     user.setAge(25); 

     return ok(Json.toJson(user)); 

    } 

    public Result create(User user){ 

     return ok(Json.toJson(user)); 
    } 
} 

Strecke Datei:

#User 
#Method.Type url    mapping with method 
GET    /user   controllers.UserController.getAll 
GET    /user/:id  controllers.UserController.get(id: Long) 
POST   /user   controllers.UserController.create 

bekommt beide Methoden /url und /user/:id funktionieren gut, aber ich bin etwas verwirrt über den Post /user. Ich habe versucht, Code wie in der Datei, ich habe über Fehler.

missing arguments for method create in class UserController; 
follow this method with `_' if you want to treat it as a partially applied function 
+0

Ihre Methode erwartet ein Objekt Benutzer, aber sie sind vorbei es nicht. – silentprogrammer

+0

Ich gebe diese JSON {"ID": 10, "Name": "Vinit", "E-Mail": "[email protected]"} –

+0

aber wie wird die Methode wissen, diese JSON in Benutzerobjekt zu konvertieren? – silentprogrammer

Antwort

2

Es gibt grundsätzlich zwei Möglichkeiten, dies zu tun.

Sie können das Standard Körper Parser (dies ist die Art und Weise Sie in Ihrem Kommentar erwähnt):

public Result create() { 
    JsonNode json = request().body().asJson(); 
    User user = Json.fromJson(json, User.class); 
    return ok(Json.toJson(user)); 
} 

Die zweite Methode ist eine betonter Körper Parser zu verwenden:

@BodyParser.Of(BodyParser.Json.class) 
public Result create() { 
    RequestBody body = request().body(); 
    User user = // some logic here 
    return ok(body.asJson()); 
} 

Bonus: anstelle von BodyParser.Json können Sie BodyParser.TolerantJson verwenden: das gleiche wie Json, aber tut n Überprüfen Sie, ob der Content-Type-Header JSON ist.

Für weitere Informationen können Sie einen Blick auf die Play documentation regarding body parsers nehmen