我尝试从PostMan调用Post方法但无法调用。
控制器文件:
public class UserController extends Controller{
public Result getAll() {
List<User> users = new ArrayList<User>();
users.add(new User("Vinit", "vinitsolanki@yahoo.com", 25));
users.add(new User("Jaimin", "jaimin@yahoo.com", 25));
return ok(Json.toJson(users));
}
public Result get(Long id) {
User user = new User();
user.setId(id);
user.setName("Vinit");
user.setEmail("vinitsolanki@yahoo.com");
user.setAge(25);
return ok(Json.toJson(user));
}
public Result create(User user){
return ok(Json.toJson(user));
}
}
路线档案:
#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
让方法/url
和/user/:id
都正常工作,但我对帖子/user
感到困惑。我在文件中尝试了代码,我遇到了上述错误。
missing arguments for method create in class UserController;
follow this method with `_' if you want to treat it as a partially applied function
答案 0 :(得分:2)
基本上有两种方法可以做到这一点。
您可以使用默认正文解析器(这是您在评论中提到的方式):
public Result create() {
JsonNode json = request().body().asJson();
User user = Json.fromJson(json, User.class);
return ok(Json.toJson(user));
}
第二种方法是使用显式身体分析器:
@BodyParser.Of(BodyParser.Json.class)
public Result create() {
RequestBody body = request().body();
User user = // some logic here
return ok(body.asJson());
}
奖励:而不是BodyParser.Json
您可以使用BodyParser.TolerantJson
:与Json相同,但不验证Content-Type标头是否为JSON。