@RequestMapping(value="/pow", method=RequestMethod.GET)
public int pow(@RequestParam(value="base") int base1, @RequestParam(value="ext") int ext1){
int pow = (int) Math.pow(base1, ext1);
return pow;
}
@RequestMapping("/sqrt/{num}")
public double sqrt(@PathVariable(value="num") int num1){
double sqrtnum=Math.sqrt(num1);
return sqrtnum;
}
http://localhost:3000/api/group/test?id=4
@GetMapping("/group/test")
public ResponseEntity<?> test(@RequestParam Long id) {
System.out.println("This is test");
return ResponseEntity.ok().body(id);
}
字符串 而@PathVariable用于直接从URI中提取数据:
http://localhost:3000/api/group/test/4
@GetMapping("/group/test/{id}")
public ResponseEntity<?> test(@PathVariable Long id) {
System.out.println("This is test");
return ResponseEntity.ok().body(id);
}
@PathVariable - must be placed in the endpoint uri and access the query parameter value from the request
@RequestParam - must be passed as method parameter (optional based on the required property)
http://localhost:8080/employee/call/7865467
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = false) String callStatus) {
}
http://localhost:8080/app/call/7865467?status=Cancelled
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = true) String callStatus) {
}
9条答案
按热度按时间aemubtdh1#
@PathVariable
是从URI中获取一些占位符(Spring称之为URI模板)-参见Spring参考章节16.3.2.2 URI模板模式@RequestParam
也是从URI中获取参数-参见Spring参考章节16.3.3.3使用@RequestParam将请求参数绑定到方法参数如果URL
http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
在2013年12月5日获得用户1234的发票,控制器方法将如下所示:字符串
此外,请求参数可以是可选的,并且从Spring 4.3.3开始路径变量也可以是可选的。但是要注意,这可能会更改URL路径层次结构并引入请求Map冲突。例如,
/user/invoices
是否会提供用户null
的发票或ID为“invoices”的用户的详细信息?kd3sttzy2#
@RequestParamannotation,用于从请求中获取查询参数值,请看下面的请求URL:
字符串
在上面的URL请求中,param 1和param 2的值可以如下访问:
型
以下是@RequestParam annotation支持的参数列表:
*defaultValue-如果请求没有该值或为空,则该值为默认值,作为回退机制。
*name-要绑定的参数的名称
*必填-参数是否为必填,如果为true,则该参数发送失败。
*value-这是name属性的别名
@PathVariable
@PathVariable 标识传入请求的URI中使用的模式。让我们看看下面的请求URL:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
上面的URL请求可以在Spring MVC中编写如下:
型
@PathVariableannotation只有一个绑定请求URI模板的属性值,允许在一个方法中使用多个@PathVariableannotation,但要确保不超过一个方法具有相同的模式。
还有一个更有趣的注解:@MatrixVariable
http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,+10.40,+3.91;AZN=236.00,+103.00,+3.29;SBRY=375.50,+7.60,+2.07的
以及它的Controller方法
型
但您必须启用:
型
qyuhtwio3#
@RequestParam用于查询参数(静态值),如:http://localhost:8080/calculation/pow?base=2&ext=4
@PathVariable用于动态值,如:http://localhost:8080/calculation/sqrt/8
字符串
pbgvytdp4#
1)
@RequestParam
用于提取 * 查询参数 *字符串
而
@PathVariable
用于直接从URI中提取数据:型
2)
@RequestParam
在传统的Web应用程序中更有用,其中数据主要在查询参数中传递,而@PathVariable
更适合于URL包含值的RESTful Web服务。3)如果查询参数不存在或为空,
@RequestParam
annotation可以通过使用defaultValue
属性指定 default values,前提是所需的属性为false
:型
nbysray55#
可能是application/x-www-form-urlencoded midia类型将空格转换为**+,而接收器将通过将+**转换为空格来解码数据。info.http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
wj8zmpe16#
字符串
2w2cym1i7#
这两个注解的行为完全相同。
注解@PathVariable和@RequestParam只接受2个特殊字符“!”和“@”。
为了检查和确认行为,我创建了一个只包含1个控制器的spring Boot 应用程序。
字符串
点击以下请求,我得到了相同的响应:
1.@#$%^&*()_+-=[]{}|;':“,./<>?
!@在两个请求中都作为响应收到
dldeef678#
@RequestParam:我们可以说它是查询参数,就像一个键值对@PathVariable:-它来自URI
dhxwm5r49#
据我所知
**Case 1(@RequestParam):**假设url喜欢键值对
http://localhost:8080/getStudent?aid=101
这里我们将使用@RequestParam annotation来获取值。
范例:
字符串
**Case 2(@PathVariable):**假设url像
http://localhost:8080/getStudent/101的
这里我们将使用@PathVariable annotation来获取值。
范例:
型