2011-07-30 16 views
3

Spring @RequestParamを検証して、何らかのPOJO転送オブジェクト(@ModelAttribute)を使用せずにBindingResultに入れる方法を教えてください。Spring 3で@RequestParamを検証するMVC

MapBindingResultを使用してリクエストパラメータを配置することはできますが、そのバインディング結果をモデルに追加する必要があります。

これは、org.springframework.validation.BindingResult.MODEL_KEY_PREFIX + nameで行うことができます。

(別のPOJOを作成するのではなく)リクエストパラメータをバインドして検証する方法がありますか?

答えて

0

Spring MVC 3.0以降を使用している場合は、declarative validation support Spring提供を使用できます。その後、モデルBeanの検証制約を宣言し、参照文書の"Spring Validation"の章に記載されているように、フォームバッキングBeanに@Validアノテーションを追加します。

あなたが直接Beanが検証された後BindingResultパラメータを追加した場合、あなたは、あなたのコントローラ内の検証エラーをチェックすることができます

// .. in the bean class 
public class MyBean { 
    @NotNull 
    private String name; 
    // .. 
} 

// .. in the @Controller 
public ModelAndView doSomething(@Valid MyBean data, BindingResult bindingResult) { 
    if (bindingResult.hasErrors()) { 
     // back to form 
    } 
    // do something with the bean 
} 
+0

私は避けるようにしようとしている何です。私は必要としないか、もう一つの背骨を形成する必要があります。 –

+0

ああ、大丈夫です。それで、 'BindingResult'(そして' DataBinder'は内部的に使用されています)のモチベーションは、/ commandオブジェクトのみを形成するためのバインディング要求データに適用されるので、私はそれを見ていません。個々の '@ RequestParam'値(例:プリミティブや文字列)を調べようとすると、カスタムBindingResultをあらかじめ塗りつぶすためのアスペクトや、リクエストパラメータの前に追加のアクションを実行する特定の' HandlerInterceptor'を書くことができますコントローラーに当たる。 –

+1

BindingResultを使用したい理由は、エラーメッセージとi18nを処理するということです。今は別の転送オブジェクトを作成しました。 –

関連する問題