2012-04-23 226 views
0

我必須爲使用Spring MVC 3的Web應用程序實現驗證。問題是Bean類具有諸如getProperty(「name」)和setProperty(「name」,valueObj)之類的方法。驗證必須通過將不同的值傳遞給getProperty(「name」)返回的數據完成,例如:getProperty(「age」)應該大於16,並且getProperty(「state」)應該是必需的。Spring MVC Bean驗證

我想知道是否有任何驗證這種Bean的支持,如果不是,可以做些什麼工作。

感謝, 與Atif

+1

恕我直言,這個類是不豆。 – SJuan76 2012-04-23 21:41:08

回答

1

這聽起來像你想要一個實現org.springframework.validation.Validator的自定義驗證類。

@Component 
public class MyValidator implements Validator { 

    @Override 
    public boolean supports(Class<?> clazz) { 
     return MyBean.class.isAssignableFrom(clazz); 
    } 

    @Override 
    public void validate(Object target, Errors errors) { 
     MyBean myBean = (MyBean) target; 

     if (StringUtils.isBlank(myBean.getProperty("state"))) { 
      errors.rejectValue("state", "blank"); 
     } 
    } 

} 

在你的控制,你會做手工validaton像如下:

@Autowired 
private MyValidator myValidator; 

@RequestMapping(value = "save", method = RequestMethod.POST) 
public String save(@ModelAttribute("myBean") MyBean myBean, BindingResult result) { 

    myValidator.validate(myBean, result); 
    if (result.hasErrors()) { 
     ... 
    } 

    ... 

} 
+1

+1,這將工作。但是他的bean不會被正確綁定,這是在驗證之前。所以還需要一個自定義綁定。 ;) – Bozho 2012-04-23 22:00:37

+0

@Bozho非常好的一點,真正的JavaBeans的另一個參數:) – 2012-04-23 22:01:49

+0

在Struts 1.x中,叫做DynaBean,它只需要在xml中定義bean屬性,而不需要創建每個類的開銷。 Spring是否提供了動態配置或通過配置的方法,創建Bean類?就像我們可以在XML中定義bean和驗證一樣嗎? – 2012-04-23 22:27:17

4

我不這麼認爲。 Bean驗證是在javabeans上執行的,即帶getter和setter的類字段。即使您可以註冊自定義驗證器並進行驗證,綁定也不起作用。您還需要註冊一個填充對象的自定義綁定器。它變得相當複雜。所以堅持javabeans約定。