SpringMVC使用@PathVariable ,参数接收使用基本类型出错

比如我现在模拟了一个 RESTFUL 风格的分页代码

@RequestMapping(value = "/{nodeName}/page{pageNumber}", method = RequestMethod.GET)
public String index(@PathVariable String nodeName, @PathVariable int pageNumber)
{
    logger.debug("节点请求路径{}/page{}", nodeName, pageNumber);
    return "/node/index";
}

如果第一页我不传参数 pageNumber,那么就会报异常错误 org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type [java.lang.String] to required type [int]; nested exception is java.lang.NumberFormatException: For input string: ""

归根是这里 pageNumber 是基本类型,Spring 的转换器接收到的参数空字符串是无法正确转化为一个数字的,就会抛出 NumberFormatException 异常。

那解决的一个办法就是将 pageNumber 参数的类型改为 Integer,这是复合类型,也是一个“对象”,这样的话,转换器如果没有接收到参数,就会设置对象值为 null。结果就不会报错,代码如下:

@RequestMapping(value = "/{nodeName}/page{pageNumber}", method = RequestMethod.GET)
public String index(@PathVariable String nodeName, @PathVariable Integer pageNumber)
{
    logger.debug("节点请求路径{}/page{}", nodeName, pageNumber);
    return "/node/index";
}
如果觉得这对你有用,请随意赞赏,给与作者支持
评论 0
最新评论