Spring MVC 3->验证


问题内容

我有一个Spring MVC应用程序,可以通过AJAX / JSON与前端通信,并且在前端有一个带有HTML的Web应用程序。

为了向数据库添加元素,我在后端系统中执行此操作:

@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对象写入数据库

难道不可能将这两个步骤合而为一吗?又如何将Person POST对象从前端放到后端的“
validate”方法中,并查看哪个字段失败(名称或电子邮件),因为仅告诉“对象有验证错误”不是很不错:-)?

最好的祝福。


问题答案:

我做到了在此示例中显示的内容: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());
    }
}