質問:request.JSONデータを使用してコマンドオブジェクトの自動バインドを行う方法はありますか?
私のgrailsコントローラーにこの単純なCommandオブジェクトがあるとすると、次のようになります。
class ProfileCommand{
int id
String companyName
static constraints = {
companyName blank: false
id nullable: false
}
@Override
public String toString() {
return "ProfileCommand{id=$id, companyName='$companyName'}";
}
}
と私のコントローラーメソッドの署名:
def update(ProfileCommand command) {...}
request.JSON
コマンドオブジェクトにデータを取り込むにはどうすればよいですか?
これまでのところ、私がそれを行うことができた唯一の方法は、update()
メソッド内でコマンドオブジェクトを手動で作成し、コンストラクター引数としてrequest.JSONを渡すことです。
def command = new ProfileCommand(request.JSON)
log.debug "Command object contents: $command"
上記のdebugコマンドは以下を生成します。
Command object contents: ProfileCommand{id=1, companyName='Blub Muckers'}
これはまさに私が望んでいることです(上記の解決策についてOliver Tynesに大声で叫びます)。command.validate()
残念ながら、コマンドを作成した後に呼び出すと、次の例外が発生します。
Class org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException
Message Tag [validate] is missing required attribute [form]
私はv2.0.3を使用していますが、URIはv2.0.4で同じ例外を生成しました。
UPDATEgrails
メーリングリストのIanRobertsによると、@Validateable
させるには、コマンドクラスにアノテーションをvalidate()
。ありがとう、イアン!