Java Spring MVC 3.0:字符串是@PathVariable使用的首选类型吗?

Java Spring MVC 3.0:字符串是@PathVariable使用的首选类型吗?,java,spring,spring-mvc,Java,Spring,Spring Mvc,请原谅我在这里问了这么简单的问题,因为我是SpringMVC3.0的新手。我已经阅读了几次spring源代码网站上的文档。下面是我将在下面的问题中参考的代码片段:- @RequestMapping("/pets/{petId}") public void findPet(@PathVariable String petId, Model model) { // implementation omitted } 如果我打算基于这个示例使用URI模板,那么即使我希望@PathVariabl

请原谅我在这里问了这么简单的问题,因为我是SpringMVC3.0的新手。我已经阅读了几次spring源代码网站上的文档。下面是我将在下面的问题中参考的代码片段:-

@RequestMapping("/pets/{petId}")
public void findPet(@PathVariable String petId, Model model) {    
// implementation omitted
}
如果我打算基于这个示例使用URI模板,那么即使我希望@PathVariable类型是其他类型(例如int),是否总是最好将其设置为String?文档中说@PathVariable注释可以是任何简单类型,但如果Spring无法将无效的petId转换为int(例如,用户输入一些字符而不是数字),它将抛出TypeMismatchException

那么,验证器什么时候起作用?我是否将所有@PathVariable类型保留为String,并让验证器对字符串值执行验证,如果没有验证错误,则显式地将字符串转换为所需的类型

多谢各位

  • @PathVariable
    为您期望的类型,而不一定是
    字符串
  • 有一个定制良好的错误页面。如果用户决定在URL中写入内容,他应该知道“后果”
  • 你说

    但是,如果Spring无法将无效的petId转换为int,它将抛出一个typemischException

    嗯。但如果需要,可以通过@ExceptionHandler注释处理控制器中引发的异常

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

    @ExceptionHandler方法签名是flexibe,请参见

    如果用户自己构造URL,则此方法有效。但是,如果petId的值来自表单提交的打开文本字段,我不确定这将如何工作。那么这不是
    @PathVariable
    ,而是
    @RequestParam
    。验证应该在客户端完成,除了服务器端谢谢你的深刻解释,我想我把@pathvariable和@requestparam搞混了。我给你投票(+1),只是因为你说:他应该知道“后果”。我给你的投票是关于@ExceptionHandler,我不知道;)将其作为字符串并捕获异常可以更好地控制捕获所有TypeMismatchException.class如果调用不同的方法需要不同的错误消息怎么办?