我正在学习教程,我有以下方法:
@RequestMapping(value = "/viewstatus", method = RequestMethod.GET)
ModelAndView viewStatus(ModelAndView modelAndView, int pageNumber) {
System.out.println();
System.out.println("===========" + pageNumber + "===========");
System.out.println();
modelAndView.setViewName("app.viewStatus");
return modelAndView;
}
然而,当我转到http://localhost:8080/viewstatus?p=11
时,我收到以下错误:
Optional int parameter 'pageNumber' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.
我将int
参数更改为Long
但是当我导航到同一页面时,我在控制台中得到以下输出:
===========null===========
参数为null,所以它基本上没有被识别,但据我所知,我正在按照教程写信,你能看到我的代码有问题吗?
答案 0 :(得分:0)
添加@RequestParam
注释以将url变量映射到方法参数
public ModelAndView viewStatus(ModelAndView modelAndView,
@RequestParam("p") int pageNumber) {
答案 1 :(得分:0)
在参数的类型和名称之前,在方法的签名中使用@RequestParam
。该名称必须与url param匹配。请记住,您必须使用Wrapper类,因为原始类型不支持空值。
答案 2 :(得分:0)
ModelAndView viewStatus(
ModelAndView modelAndView,
@RequestParam(value = "p", required=false) Integer pageNumber
){
//...
}
首先使用@RequestParam
注释将GET
值映射到方法参数。然后,如果您想要参数可选,可以将required
的 @RequestParam
属性指定为 false 。< / p>
如果您想为params分配一些 default value
,可以使用defaultValue
属性。
注意:如果您的GET参数
KEY
名称等于Method Argument
名称,则您不必使用value
属性。
ModelAndView viewStatus(
ModelAndView modelAndView,
@RequestParam(required=false) Integer p
){
//...
}
由于您使用原始int
,因此无法保留null
值。因此,您可以使用Wrapper
班级Integer
。但请记住使用@RequestParam
将GET
值映射到method argument