2011-01-11 4 views
2

У меня есть приложение Spring MVC, которое общается с интерфейсом с AJAX/JSON, и у меня есть в интерфейсе веб-приложение с HTML.Spring MVC 3 -> Validation

Для добавления элемента в базу данных, я делаю это в серверной системе:

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

Но теперь у меня есть проблема (это очень простой пример), что кто-то может создать проект без name, поэтому имя = "" и недействительный адрес электронной почты. Моя проблема в том, что я хочу проверить поля в бэкэнд-системе.

Так что я нашел витрину 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

Невозможно ли объединить эти два шага за один шаг? И как я могу поместить объект POST Person из внешнего интерфейса в метод «проверки» в бэкэнд и посмотреть, какое поле выходит из строя (имя или адрес электронной почты), потому что говорить только «Объект имеет ошибки проверки» не так хорошо :-)?

С наилучшими пожеланиями.

ответ

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