2015-04-17 51 views
2

我想驗證請求參數,它只是一個字符串值。網上的大多數例子都是關於使用自定義驗證器來驗證域對象的。但是我想爲String值編寫一個驗證器。如何實現這一目標?在控制器之前驗證請求參數

@Controller 
@RequestMapping("/base") 
class MyController{ 

    //value needs to be validated. 
    @RequestMapping("/sub") 
    public String someMethod(@RequestParam String value, BindingResult result){ 
     if(result.hasErrors()){ 
      return "error"; 
     } 

     //do operation 
     return "view"; 

    } 
} 

我想用Validator接口,已經可以在春天,而不是AOP或者任何IF條件

+0

您可以使用AOP並攔截方法調用,驗證參數,如果無效,請手動修改綁定結果或拋出異常並在控制器中處理它。 – ecyshor

+0

我不認爲我需要AOP在這裏。我想要使​​用已經在Spring – sidgate

+0

中可用的Validator接口如何通過String創建包裝器對象,並添加JSR 303註釋以進行驗證,或者爲相應的對象創建驗證器? – ecyshor

回答

1

您的控制器無法驗證帕拉姆,因爲BindingResult應遵循ModelAttribute,而不是RequestParam

所以,如果你想使用Spring MVC自動驗證,你應該使用包含您的字符串作爲的ModelAttribute類:

class MyController { 
    @RequestMapping("/sub") 
    public String someMethod(@ModelAttribute Params params, BindingResult result){ 
     if(result.hasErrors()){ 
      return "error"; 
     } 

     //do operation with params.value 
     return "view"; 

    } 

    public static class Params { 
     // add eventual JSR-303 annotations here 
     String value; 

     // getter and setter ommited for brievety 
    } 

} 

當然,這裏假設你把一個驗證到WebBinder例如,通過一個@InitBinder您的控制器的註釋方法。

0
//value needs to be validated. 
    @RequestMapping("/sub") 
    public String someMethod(@RequestParam String value, BindingResult result) throws SomeException { 

     if (!ValidationUtils.isValid(value)) { 
      throw new SomeException("Some text"); 
     } 
+0

您能詳細解釋一下您提供的解決方案嗎? – abarisone

相關問題