對於此示例,用戶希望爲其網站創建博客文章。表單提交是通過AJAX處理的。 POST請求由控制器中的createPost方法處理。該方法提取json數據並將其與用戶會話數據結合以構建適當的Post對象。然後驗證數據並返回適當的響應。Play Framework 2:如何從控制器中的各種源正確構造對象,然後驗證它們?
樁模型如下:
@Entity
public Post extends model {
@Id
public Long id;
@Required
public User author;
@Required
public String title;
@Required
public String body;
}
控制器方法如下:
@BodyParser.Of(BodyParser.Json.class)
public static Result createPost() {
JsonNode json = request().body().asJson();
Post post = new Post();
post.author = User.findbyId(request().username());
post.title = json.findPath("title").textValue();
post.body = json.findPath("body").textValue();
Form<Post> filledForm = Form.form(Post.class).bind(Json.toJson(post));
if (filledForm.hasErrors())
return badRequest(filledForm.errorsAsJson());
// save post
return ok();
}
現在,這種方法可行,但必須有這樣做,而更好的辦法比採取json請求,提取它到一個對象,然後將該對象轉換回json,以便它可以綁定到窗體。有任何想法嗎?
謝謝你的回答,但是根本沒有回答這個問題。如果處理一個包含所有模型字段的提交表單,那麼標準的.bindingFromRequest()方法將是理想的。然而,在這種情況下,問題是關於來自各種來源(不僅僅是形式)的字段並且然後驗證它們。 – Hegemon