Поймать исключение IllegalArgumentException, созданное PropertyEditors весной - PullRequest
2 голосов
/ 25 января 2011

У меня есть PropertyEditor для перевода идентификаторов в Персоны с его setAsText (текст строки) следующим образом:

public void setAsText(String text) throws IllegalArgumentException {
    try {
        int id = Integer.parseInt(text);
        Person person = peopleService.get(id);
        this.setValue(person);
    }
    catch (NumberFormatException ex) {
        // ...
        throw new IllegalArgumentException("Not a number!: " + text);
    }
    catch (PersonNotFoundExcetion ex) {
        // ...
        throw new IllegalArgumentException("Impossible to get Person: " + text);
    }
}

И мой PeopleController имеетметод следующим образом:

@RequestMapping("/getPerson")
public void ver (@RequestParam Person person, Model model) {
    model.addAttribute (person);
    // ...
}

Я хочу перехватить исключение IllegalArgumentException, чтобы показать пользователю дружественное сообщение, такое как «Извините, искомого человека здесь нет», но яне знаю, где это сделать ...

Спасибо!

Ответы [ 2 ]

4 голосов
/ 25 января 2011

Общая обработка исключений может быть выполнена следующим образом:

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleAllExceptions(Exception e) {
  return "redirect:/error.html"; /* use the correct view name */
}

Более конкретно вы можете использовать BindingResult

@RequestMapping(value = "/datedata", method = RequestMethod.POST)
public String create(
    @ModelAttribute("datedata") final DateData datedata,
    final BindingResult result) {

    if (result.hasErrors()) {
        return "datedata/create";
    } else {
        ...
        return "myView";
    }
 }

Но я думаю, что это работает только для "форм" (ModelAttribute)

По моему скромному мнению, не рекомендуется, чтобы Spring обрабатывал проверенные пользователем данные редакторами свойств. Я настоятельно рекомендую использовать способ формы: создать объект команды с полем STRING и использовать валидатор.

1 голос
/ 25 января 2011

Исключение следует отлавливать в контроллере.Он никогда не должен просачиваться к представителю и конечному пользователю.

Если это веб-приложение, я бы рекомендовал использовать API проверки и привязки, а не PropertyEditor.Это позволит вам возвращать ошибки, которые вы можете использовать, чтобы сообщить пользовательскому интерфейсу, что необходимо исправить.

Ваша обработка исключений нуждается в работе.Я бы не рекомендовал ловить исключение и ничего не делать, кроме как обернуть его и перебросить.Это ничего не обрабатывает и не добавляет новую информацию.Это на самом деле меньше информации, как закодировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...