0

我正在学习教程,我有以下方法:

@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===========

该参数为空,因此基本上无法识别,但据我所知,我正在按照教程进行操作,您能看到我的代码有问题吗?

4

3 回答 3

0
ModelAndView viewStatus(
    ModelAndView modelAndView, 
    @RequestParam(value = "p", required=false) Integer pageNumber
){
    //...
}

首先使用@RequestParam注释将GET值映射到方法参数。然后,如果您想让该参数成为可选参数,您可以指定to falserequired的属性。@RequestParam

如果您想将一些分配default value给参数,您可以使用defaultValue属性。

注意:如果您的 GET 参数KEY名称等于Method Argument名称,那么您不必使用value属性。

    ModelAndView viewStatus(
        ModelAndView modelAndView, 
        @RequestParam(required=false) Integer p
    ){
        //...
    }

由于您使用的是原语int,因此它们无法保存该null值。所以你可以使用WrapperClass Integer。但请记住使用@RequestParam将值映射GETmethod argument

于 2016-09-12T06:58:18.573 回答
0

添加@RequestParam注释以将 url 变量映射到方法参数

public ModelAndView viewStatus(ModelAndView modelAndView, 
                               @RequestParam("p") int pageNumber) {
于 2016-09-11T22:16:46.793 回答
0

在方法的签名中使用@RequestParam,在参数的类型和名称之前。名称必须与 url 参数匹配。请记住,您必须使用 Wrapper 类,因为原始类型不支持空值。

于 2016-09-11T22:19:10.920 回答