更新で JSON リクエストの必須フィールドが指定されていない場合に、Play が不平を言うのをやめさせようとしています。必須フィールドには、変更したくない値が既に含まれているため、再度指定する必要はありません。
簡素化されたモデル:
@Entity
public class Run extends Model {
public enum Status { RUNNING, OK, WARNINGS, ERRORS, FAILED, CERTIFIED };
@Id
public Long id;
@Constraints.Required
@ManyToOne(cascade = CascadeType.REFRESH)
public Task task;
@JodaDateTime
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
public DateTime started;
@JodaDateTime
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
public DateTime completed;
@Enumerated(EnumType.STRING)
@Column(columnDefinition="ENUM('OK','WARNINGS','ERRORS','RUNNING','FAILED','CERTIFIED')")
public Status result;
}
サンプル アプリケーションの 1 つに基づいて、最初のコントローラー アクションは次のとおりです。
@Transactional
@BodyParser.Of(play.mvc.BodyParser.Json.class)
public static Result update(Long run_id) {
Form<Run> runForm = form(Run.class).bindFromRequest();
if(runForm.hasErrors()) {
return badRequest(runForm.errorsAsJson());
}
runForm.get().update(run_id);
ObjectNode result = Json.newObject();
result.put("id", run_id);
return ok(result);
}
しかし、私がそれを送信しただけでは、それが必要{ completed: '1341268791000', result: 'ERRORS }
であると不平を言いtask
ます。
それから私はおそらくそれForm.fill
を修正するために使用できると思いました:
@Transactional
@BodyParser.Of(play.mvc.BodyParser.Json.class)
public static Result update(Long run_id) {
Run run = Run.find.byId(run_id);
Form<Run> runForm = form(Run.class).fill(run).bind(request().body().asJson());
if (runForm.hasErrors())
return badRequest(runForm.errorsAsJson());
runForm.get().update(run_id);
ObjectNode result = Json.newObject();
result.put("id", run_id);
return ok(result);
}
しかし、それも役に立ちませんでした。秘密は何ですか?