アノテーションを使用してSpringによって注入されArticleFormModel
た、通常から送信された包含データがあります。html form
@ModelAttribute
@RequestMapping(value="edit", method=RequestMethod.POST)
public ModelAndView acceptEdit(@ModelAttribute ArticleFormModel model,
HttpServletRequest request, BindingResult errors)
{
//irrelevant stuff
}
ある時点まで、すべてが完全に正常に機能します。問題はArticleFormModel
、double
フィールド ( protected
、通常のセッターを使用して設定) が含まれていることです。ユーザーから送信されたデータが数値である限り、すべて正常に機能します。彼らが単語を入力すると、私が得るのは400 Bad Request Http Error
.
私はすでにWebDataBinder
このコントローラに を登録しています
@InitBinder
protected void initBinder(WebDataBinder binder) throws ServletException
{
binder.setValidator(validator);
}
wherevalidator
はインターフェイスを実装するカスタム クラスのインスタンスですが、org.springframework.validation.Validator
次に何をすべきかわかりません。モデルを解析し、有効な HTTP 応答を取得し、エラー メッセージをフォームに表示できるようにしたいと考えています。initBinder()
メソッドが呼び出され、そこから呼び出すことができますがvalidator.validate()
、エラーは変更されません (その間違ったデータの場合)。
セッターを使用して文字列を解析し、それが数値かどうかを確認し、そうでない場合はその情報を変数に格納し、検証中にその変数を取得できることを認識していますが、それは多すぎるようです。エラーを発生させずにフィールドに型を強制する簡単な方法が必要です。また、問題は検証ではなくデータ バインディングにあるため、それぞれのコード レイヤーに配置する必要があると感じています。
java.beans.PropertyEditor
を実装して呼び出すことも考えbinder.registerCustomEditor()
ていましたが、信頼できる知識源が不足しています。
クライアント側の検証 (JavaScript を介してデータが数値かどうかを確認する) は不可能です。
TL;DR:
@ModelAttribute
取得せずに項目の特定のタイプになるようにフィールドを強制するにはどうすればよい400 Bad Request Http Error
ですか?