Spring MVC 3 -> Проверка - PullRequest
       3

Spring MVC 3 -> Проверка

2 голосов
/ 11 января 2011

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

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

@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 вбаза данных

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

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

1 Ответ

2 голосов
/ 12 января 2011

Я сделал это показано в этом примере: 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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...