2011-07-30 165 views
3

如何驗證Spring @RequestParam,以便它們在BindingResult中不必使用某種POJO傳輸對象(@ModelAttribute)?在Spring 3中驗證@RequestParam MVC

我可以使用MapBindingResult並將請求參數放在那裏,但是我必須將該綁定結果放入模型中。

我可以用org.springframework.validation.BindingResult.MODEL_KEY_PREFIX + name來做什麼。

有更好的方法來綁定和驗證請求參數(而不是另一個POJO)嗎?

回答

0

如果您使用Spring MVC 3.0或更高版本,則可以使用Spring提供的declarative validation support。然後,您將在模型bean上聲明驗證限制,並將@Valid註釋添加到您的表單支持bean,如參考文檔中的章節"Spring Validation"中所述。

如果添加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')的動機,因爲它們僅適用於綁定請求數據以形成/命令對象。如果你嘗試檢查單個'@ RequestParam'值(例如原語或字符串),你可以使用一個方面預先填充一個自定義的'BindingResult',或者寫一個特定的'HandlerInterceptor',對請求參數執行額外的動作命中控制器。 –

+1

我想使用BindingResult的原因是它處理錯誤信息和i18n。現在我只做了另一個轉移對象。 –