问题
具体问题如下:
正确的如下:
如上两图所示:我们的请求参数是pageNo和pageSize,但是却没有正确显示,则说明我们的接口存在了问题。
分析问题
参数为什么没有正确的显示每页显示条数和当前页数,而是我们的实体类名?查看了一下我们的参数前有一个注解@RequestParam,是不是因为这个注解导致的错误呢?去掉了这个注解,启动后则正确显示了当前所想要的参数!
什么是@RequestParam
要想理解这个问题,则需要将@RequestParam这个注解理解了!
@RequestParam主要用于将请求参数区域的数据映射到我们控制层方法的参数上,他的主要参数如下:
1、value:请求中传入参数的名称,当我们不设置后台接口的value值的时候,则会默认为该变量名。则前端传入的参数名必须为我们的变量名,否则在后台接口中pageNum将接收不到对应的数据
2、required:则说明这个参数是否是必传项。默认的是true,表示请求中一定要传入这个对应的参数,否则会报出404错误,如果我们设置为false的时候,当请求中没有此参数,将会默认为null,然而对于基本数据类型的变量,则必须有值,没有的话,这时会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。
3、defaultValue:参数的默认值,如果在我们的请求中没有同名的参数映射时,该变量默认为此值。注意默认值可以使用SpEL表达式,如"#{systemProperties[‘java.vm.version’]}"
还有一种情况,那就是当我们如果在请求中传入多个同名参数,比如:url?userName=dongkai&userName=dog时候,会怎么办?
其实,此时传入的数据格式是:“dongkai,dog”,即多个数据之间使用逗号分隔开就可以,在后台接口中可以使用LIST或者数组类型的变量来接收:
如下:
public String requestparamDemo(@RequestParam(value="list") List<String> list)
或
public String requestparamDemo(@RequestParam(value="userName") String [] userNames)
解决问题
通过上面的分析我们讲解完之后,你应该很明白了,此时我们将@RequestParam注解去掉既可以!
今天关于接口请求参数异常之@RequestParam问题讲解到这里。
欢迎大家点击下方卡片关注《coder练习生》