gpt4 book ai didi

浅谈@RequestParam 参数是否必须传的问题

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章浅谈@RequestParam 参数是否必须传的问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、源码展示

?
1
2
3
4
5
6
7
8
9
10
11
@Target (ElementType.PARAMETER)
@Retention (RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
  @AliasFor ( "name" )
  String value() default "" ;
  @AliasFor ( "value" )
  String name() default "" ;
  boolean required() default true ;
  String defaultValue() default ValueConstants.DEFAULT_NONE;
}

这是示例代码 。

?
1
2
3
4
5
@GetMapping ( "/findById" )
   public ResultBean byid( @RequestParam (defaultValue = "1" ,required = false , /*value = "ss",*/ name = "ls" ) Integer id){
     List<Customers> all = customersService.findById(id);
     return ResultBean.ok(all);
   }

2、说明

2.1 @RequestParam,对于参数入参,这个注解可以不必须有,但只能匹配和你定义的入参,完全一样的名称,对应则匹配,不对应就不匹配.

2.2 required ,是否必须,默认为 true,也就是说,当@RequestParam存在时,是默认required = true条件的,@RequestParam不存在时,返回 2.1 的解释.

2.3 defaultValue ,设置初始值,一般和required = false一起使用,如果不传值,则使用默认值.

2.4 value ,和name,一样,给变量起别名,一一对应于前端传的属性名,映射到后端接口变量名,有时前端无法按要求传给你你所希望的变量名,这个就发挥用处了.

2.5 name ,和value一样,给变量起别名,两个同时存在时,访问时就会出错.

补充:springMVC的@RequestParam是必须滴 。

先看下代码:

?
1
2
3
4
5
6
7
8
@RequestMapping (value = "/campaigns/{pageNo}/{pageSize}" , method = RequestMethod.GET)
public String getList( @PathVariable ( "pageNo" ) int pageNo,
   @PathVariable ( "pageSize" ) int pageSize,
   @RequestParam (defaultValue = "0" ) int status,
   @RequestParam (required= false ) String keyword) {
     //....
     return null ;
}

1.@RequestParam

在上面代码中,一般情况下@RequestParam不加,方法参数也一样能获取对应绑定的数据,所以很多人都认为@RequestParam是可加可不加的.

直到后来才了解到,Java的反射机制生成的对象并不会保存包含方法的参数,即参数名不会保留在class文件中,所以spring不能反射绑定.

那么问题来了,为什么我们平时都能绑定呢?

这是因为,在Debug模式开启情况下,就能绑定,而我们一般用的eclipse都是默认开启的.

Debug模式下之所以能够绑定,是因为在project–>Properties–>Java Compiler里选中了Add variable attributes to generated class files(used by the debugger).

要知道,开启Debug模式会影响性能的,所以正式上线的时候,都会关掉的,如果我们没加的话就会报以下错误:

Request processing failed;nested exception is java.lang.IllegalArgumentException:Name for argument type …. 。

2.@PathVariable

@PathVariable是用来指定获取@RequestMapping里URL中占位符参数的字段,如上面的@PathVariable(“pageNo”) int pageNo中的pageNo字段就是为了获取{pageNo}这个占位符的值.

@PathVariable括号里的名字必须与占位符的名字一致,而字段名可以不用一样.

如果括号里不指定名字,则在非debug模式下也会遇到1的问题 。

所以,@PathVariable括号里的名字是必须的.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我。如有错误或未考虑完全的地方,望不吝赐教.

原文链接:https://blog.csdn.net/qq_42105629/article/details/97298720 。

最后此篇关于浅谈@RequestParam 参数是否必须传的问题的文章就讲到这里了,如果你想了解更多关于浅谈@RequestParam 参数是否必须传的问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com