2011-01-11 4 views
2

J'ai une application Spring MVC qui communique avec le frontend avec AJAX/JSON, et j'ai dans le frontend une application web avec HTML.Spring MVC 3 -> Validation

Pour ajouter un élément à la base de données, je fais cela dans le système back-end:

@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()); 
} 

Mais maintenant j'ai le problème (ce qui est un exemple très simple), que quelqu'un peut créer un projet sans nom, donc le nom = "" et une adresse email non valide. Mon problème est que je veux valider les champs dans le système backend.

donc j'ai trouvé une vitrine Spring MVC ici: https://src.springsource.org/svn/spring-samples/mvc-showcase/src/main/java/org/springframework/samples/mvc/validation/

Ils le font:

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

Alors, est-ce la meilleure façon? Je dois donc faire deux étapes:

  1. valident l'objet Personne (si aucune erreur, passez à l'étape 2, montrer autrement message d'erreur à l'utilisateur)
  2. écrire l'objet Personne à la datbase

N'est-il pas possible de combiner ces deux étapes en une seule étape? Et comment puis-je mettre l'objet Person POST du frontend à la méthode "validate" dans le backend et voir quel champ échoue (nom ou email), car dire seulement "Object has validation errors" n'est pas si bon :-)?

Cordialement.

Répondre

2

Je l'ai fait indiqué dans cet exemple: 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()); 
    } 
}