2011-01-11 109 views
2

我有一個使用AJAX/JSON與前端進行通信的Spring MVC應用程序,並且我在前端有一個帶有HTML的Web應用程序。Spring MVC 3 - >驗證

對於添加元素到數據庫中,我這樣做是在後端系統:

@RequestMapping(value="add/", method=RequestMethod.POST) 
public @ResponseBody SerializePerson addProject(@RequestBody Person person) { 
    Person p = this.personService.addPerson(person); 
    return new SerializePerson(p.getId(), p.getName(), p.getEmail()); 
} 

但現在我有問題(這是一個非常簡單的例子),有人可以在沒有創建項目名稱,所以名稱=「」和一個非有效的電子郵件地址。 我的問題是,我想驗證後端系統中的字段。

所以,我發現了一個Spring MVC的展示位置:https://src.springsource.org/svn/spring-samples/mvc-showcase/src/main/java/org/springframework/samples/mvc/validation/

他們這樣做是:

@RequestMapping("/validate") 
public @ResponseBody String validate(@Valid JavaBean bean, BindingResult result) { 
    if (result.hasErrors()) { 
     return "Object has validation errors"; 
    } else { 
     return "No errors"; 
    } 
} 

所以,這是最好的辦法嗎?所以,我必須做的兩個步驟:

  1. 驗證Person對象(如果沒有發生錯誤,則轉到步驟2,否則顯示錯誤信息到用戶)
  2. 寫Person對象的datbase

難道不可能在一個步驟中結合這兩個步驟嗎?我怎樣才能將Person POST對象從前端放到後端的「validate」方法中,並查看哪個字段失敗(名稱或電子郵件地址),因爲只告訴「Object有驗證錯誤」不太好:-)?

最好的問候。

回答

2

我沒有在這個例子中顯示它:http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/

@RequestMapping(method=RequestMethod.POST) 
public @ResponseBody Map<String, ? extends Object> create(@RequestBody Account account, HttpServletResponse response) { 
    Set<ConstraintViolation<Account>> failures = validator.validate(account); 
    if (!failures.isEmpty()) { 
     response.setStatus(HttpServletResponse.SC_BAD_REQUEST); 
     return validationMessages(failures); 
    } else { 
     accounts.put(account.assignId(), account); 
     return Collections.singletonMap("id", account.getId()); 
    } 
}