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

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

@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 ответа

  • Пусть @PathVariable будет тем типом, который вы ожидаете, не обязательно String
  • Имейте хорошо настроенную страницу ошибки. Если пользователь решил написать что-то в URL-адресе, он должен знать о "последствиях".


Вы сказали

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

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

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

@Подпись метода обработчика excceptionHandler является flexibe, см. здесь

licensed under cc by-sa 3.0 with attribution.