Spring MVC 3.0: является ли тип String предпочтительным для использования в @PathVariable? - PullRequest
6 голосов
/ 11 августа 2010

Извините, что задаю такой простой вопрос, поскольку я новичок в Spring MVC 3.0. Я несколько раз читал документацию с сайта Spring source. Вот фрагмент кода, на который я буду ссылаться для моего вопроса ниже: -

@RequestMapping("/pets/{petId}")
public void findPet(@PathVariable String petId, Model model) {    
// implementation omitted
}

Если я намереваюсь использовать шаблон URI, основанный на этом примере, всегда ли предпочтительно устанавливать тип @PathVariable в качестве String, даже если я ожидаю, что он будет другого типа, например int? В документации говорится, что аннотация @PathVariable может быть любого простого типа, но если Spring не может преобразовать неверный petId в int (например, пользователь вводит некоторые символы вместо цифр), он генерирует исключение TypeMismatchException.

Итак, когда в игру вступает валидатор? Оставляю ли я все типы @PathVariable в качестве String, и у меня есть валидатор для выполнения проверки значений String, и, если нет ошибки валидации, тогда явно преобразуем String в нужный тип?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 12 августа 2010

Вы сказали

, но если Spring не может преобразовать неверный petId в int, вызовет исключение TypeMismatchException .

Хорошо.Но вы можете обрабатывать возникшие исключения в контроллере с помощью аннотации @ExceptionHandler, если хотите, чтобы

@ExceptionHandler(TypeMismatchException.class)
public String handleIOException(TypeMismatchException e, HttpServletRequest request) {
    // handle your Exception right here
}

@ Сигнатура метода обработчика ExceptionHandler была flexibe, см. здесь

6 голосов
/ 11 августа 2010
  1. Пусть @PathVariable будет типом, который вы ожидаете, не обязательно String
  2. Имейте хорошо настроенную страницу ошибки.Если пользователь решает написать что-то в URL, он должен знать о «последствиях».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...