目标
今天学习如何处理URL里的参数。
要点
@RequestParam
代码
1. 先看一个最简单的例子,处理一个参数
代码
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class example {
@RequestMapping("/greeting") //change in 115
public String greeting(@RequestParam(name="user_name", required=false, defaultValue="World") String userName) { // change in 115
return "Hi "+userName+"!"; //change in 115
}
public static void main(String args[]) throws Exception{
SpringApplication.run(example.class, args);
}
}
运行结果
1. URL = http://localhost:8080/greeting?user_name=lishu
结果:Hi lishu!
2. URL = http://localhost:8080/greeting
结果:Hi World!
说明
1. 110里用的是@RequestMapping,本文用的是@GetMapping,网上查了资料后了解到:@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
用@RequestMapping也可以,我理解@RequestMapping更广泛,无论GET和POST都会map到这个函数。
2. 关于和name有关的三个标识符:name, user_name和userName
name="user_name"中的name:和required, defaultValue一样,都是@RequestMapping参数的“域名”
user_name:URL中的<name, value>对的name
userName: Java程序中的变量名
2. required和defaultValue
(1)如果把required改成true,defaultValue去掉,即改成@RequestParam(name="user_name", required=false),那么URL里不包含name参数时会返回错误。
(2)如果把required改成true,defaultValue保留,即改成@RequestParam(name="user_name", required=false, defaultValue="World"),那么URL里不包含name参数时会使用defaultValue。
(3)如果把required是false,defaultValue去掉,即改成@RequestParam(name="user_name", required=false),那么URL里不包含name参数时会把null作为缺省值。即http://localhost:8080/greeting会返回Hi null!
(4)如果不用@RequestParam, 直接用public String greeting(String userName),效果和@RequestParam(name="userName", required=false)是一样的。注意,这里Spring会认为URL中的name和Java程序中的变量名是一样的。
3. 多个参数和数组
(1)多个参数,例如增加一个参数city,代码如下:
public String greeting(@RequestParam(name="user_name", required=false) String userName, @RequestParam(name="city", required=false) String city)
测试URL: http://localhost:8080/greeting?user_name=lishu&city=shanghai
(2)数组,例如userName是数组,另有一个参数id, 代码如下:
public String greeting(
@RequestParam(name="user_name", required = false) String[] userNames, Long id){
String result = "";
if(userNames != null){
for(int i=0;i<userNames.length;i++)
result += userNames[i] + "#";
}
}
result += id;
return result;
}
测试URL:http://localhost:8080/greeting?user_name=ada&id=8&user_name=lishu
返回结果:ada#lishu#8
参考
1. 官网 | Serving Web Content with Spring MVC
网友评论