アノテーションを使用して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ですか?