2011-01-11 163 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()); 
    } 
}