在spring boot 中获取输入参数是非常方便的,先看下最简单的控制器:
@RestController
public class Hello {
@GetMapping(value = "/hello")
public String index(){
return "hello";
}
}
不出意外,最终浏览器输出是hello,但是我们有时候要获取请求参数怎么办呢,我们先以get方式演示,post的也差不多,比如我们要输入两个参数name和age,可以直接在方法参数上这么写:
@RestController
public class Hello {
@GetMapping(value = "/hello")
public String index(String name,int age){
return "name="+name+" age="+age;
}
}
在浏览器输入 http://localhost:8080/hello?name=tom&age=11 以上写法可以直接得到我们浏览器输入的参数,但是这种写法有个问题,就是当我们没有输入参数就会报错 ,比如我直接输入 http://localhost:8080/hello,就报异常了,这样的用户体验效果非常不好,我们可以给输入参数设置默认值,哪么我们就要用到注解RequestParam来给输入参数设置默认值。
@RestController
public class Hello {
@RequestMapping(value = "/hello")
public String index(@RequestParam(name = "name",required = false,defaultValue = "") String name,@RequestParam(name="age",required = false,defaultValue = "") Integer age){
return "name="+name+" age="+age;
}
}
required = false用来设置参数是非必须的,defaultValue = ""用来设置参数默认值。
还可以用Map来获取任意参数.我们可以把输入的map遍历键值打印出来.
@RestController
public class Hello {
@RequestMapping(value = "/hello")
public String index(@RequestParam Map<String,String> map){
String res="";
for(Map.Entry e:map.entrySet()){
res+="key="+e.getKey()+" value="+e.getValue()+"<br/>";
}
return res;
}
}
在浏览器输入http://localhost:8080/hello?a=1&b=2&c=3,大家就可以看到各种参数了。
也可以把实体对象输入进来,我们先建一个User对象,等会把User对象输入进来.
public class User {
private Long id;
private String name;
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String toString(){
return "name="+getName()+" age="+getAge()+" id="+getId();
}
}
控制器代码:
@RestController
public class Hello {
@RequestMapping(value = "/hello")
public String index(User user){
return user.toString();
}
}
现在在浏览器输入http://localhost:8080/hello?name=tom&age=11&id=1就可以看到,输入的user对象。如果是post提交,如果用json,参数user前必须加RequestBody注解
@RestController
public class Hello {
@RequestMapping(value="/hello", method=RequestMethod.POST)
public String index(@RequestBody User user){
return user.toString();
}
}
在postman中提交数据时必须 在header中写 Content-Type:application/json,提交参数选 body里面的row然后输入json : {"name":"tom","age":14,"id":1},就可以得到结果了,如果不用json提交,用form-data.提交就不用这么麻烦,直接在下面写参数就可以了。
如果是使用路径参数,可以使用PathVariable 注解
@RestController
public class Hello {
@GetMapping(value="/hello/{name}/{age}")
public String index(@PathVariable String name,@PathVariable Integer age){
return "name="+name+" age="+age;
}
}