Spring MVC 3.0: Действительно ли строка является предпочтительным типом, который будет использоваться для @PathVariable?

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

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

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

Так, когда делает блок проверки допустимости, играет роль? Я оставляю все типы @PathVariable, чтобы быть Строкой и иметь блок проверки допустимости для выполнения проверки на Строковых значениях, и если нет никакой ошибки проверки, то явно преобразовывают Строку в желаемый тип?

Спасибо.

6
задан limc 11 August 2010 в 16:28
поделиться

2 ответа

  1. Пусть @PathVariable будет тем типом, который вы ожидаете, не обязательно String
  2. Иметь хорошо настроенную страницу ошибок. Если пользователь решает написать что-то в URL-адресе, он должен осознавать «последствия».
6
ответ дан 8 December 2019 в 18:29
поделиться

Вы сказали

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

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

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

подпись метода обработчика @ExceptionHandler - это flexibe, см. здесь

7
ответ дан 8 December 2019 в 18:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: