spring boot没有注册可选的GET参数

时间:2016-09-11 22:11:12

标签: java spring-boot getparameter

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

@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,所以它基本上没有被识别,但据我所知,我正在按照教程写信,你能看到我的代码有问题吗?

3 个答案:

答案 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。但请记住使用@RequestParamGET值映射到method argument