Простите мне за задавание такого простого вопроса здесь, поскольку я плохо знаком с Spring MVC 3.0. Я читал документацию из пружинного исходного веб-сайта несколько раз. Вот фрагмент кода, к которому я обращусь для моего вопроса ниже:-
@RequestMapping("/pets/{petId}")
public void findPet(@PathVariable String petId, Model model) {
// implementation omitted
}
Если я намереваюсь использовать шаблон URI на основе этого примера, всегда предпочтительно настроить тип @PathVariable, чтобы быть Строкой даже при том, что я ожидаю, что это будет другим типом, такой как, интервал? В документации говорится, что @PathVariable аннотация может иметь любой простой тип, но если Spring не может преобразовать недопустимое мелкое в интервал (например, пользователь вводит некоторые символы вместо чисел), это бросит TypeMismatchException.
Так, когда делает блок проверки допустимости, играет роль? Я оставляю все типы @PathVariable, чтобы быть Строкой и иметь блок проверки допустимости для выполнения проверки на Строковых значениях, и если нет никакой ошибки проверки, то явно преобразовывают Строку в желаемый тип?
Спасибо.
@PathVariable
будет тем типом, который вы ожидаете, не обязательно String
Вы сказали
, но если Spring не сможет преобразовать недопустимый petId в int, он вызовет исключение TypeMismatchException .
Хорошо. Но вы можете обрабатывать возникшие исключения в контроллере с помощью аннотации @ExceptionHandler, если хотите
@ExceptionHandler(TypeMismatchException.class)
public String handleIOException(TypeMismatchException e, HttpServletRequest request) {
// handle your Exception right here
}
подпись метода обработчика @ExceptionHandler - это flexibe, см. здесь