获取参数是web开放中必不可少的,在SpringBoot中获取参数有多种方式,下面一一讲解各个方法是如何获取参数的。
HttpServletRequest原生方法
获取HttpServletRequest对象也是Servlet开发中获取参数的方法。
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/testParam")
public String getUrlValue(HttpServletRequest request) {
//获取单个参数
String name = request.getParameter("name");
//获取全部参数
Map<String, String[]> parameterMap = request.getParameterMap();
String[] gender = parameterMap.get("gender");
System.out.println(name);
return name;
}
}
直接把需要接受的参数放在方法的形参中
该方法适用于参数较少的情况,参数多的时候需要将参数封装为Java类。
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/testParam")
public String getUrlValue(String name, String gender) {
System.out.println("name is:"+name);
System.out.println("gender is:"+gender);
return name;
}
}
该方法可以接受get和post参数,上面的例子中接收的参数是name和gender,如果参数较多需要封装为Java对象,看下面的例子。封装为JavaBean接收
这也是我们开发中在多参数提交的时候经常使用的方法,对于再多的参数只需要在Java类中添加相关属性即可。
HelloController.java
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/testParam")
public String getUrlValue(User user) {
System.out.println("name is:"+user.getName());
System.out.println("gender is:"+user.getGender());
return user.getName();
}
}
User.class
package com.example.yxjc.domain;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 2733191978271622951L;
private String name;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
使用@PathVariable注解接收参数
这是一种固化url地址接收参数的方式,同样应对于参数较少的情况。
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/testParam/{name}/{gender}")
public String getUrlValue(@PathVariable String name, @PathVariable String gender) {
System.out.println("name is:"+name);
System.out.println("gender is:"+gender);
return name;
}
}
上面的例子中url只能是/testParam/param1/param2,那么我们的param1对应于name,param2对应于gender。
使用@RequestParam注解接收参数
使用该方式需要参数存在,不存在则会报错。
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/testParam")
public String getUrlValue(@RequestParam("name") String name, @RequestParam("gender") String gender) {
System.out.println("name is:"+name);
System.out.println("gender is:"+gender);
return name;
}
}
上面的例子中,参数name和gender必须同时存在,这也是简单校验是否为空的一种方式,可以设置参数不存在 方法:@RequestParam(value="name", required=false)使用@RequestBody注解接收参数
该方法只适用于post提交的参数,还需要设置Content-Type为application/json。
@Controller
public class HelloController {
@ResponseBody
@PostMapping("/testParam")
public String getUrlValue(@RequestBody User user) {
System.out.println("name is:"+user.getName());
System.out.println("gender is:"+user.getGender());
return user.getName();
}
}
总结
对于少量参数直接写在方法上即可,如果参数较多的情况下则封装成java类,如果需要控制url的格式可以使用使用@PathVariable注解。
下面讲解web开发中常用的方法,SpringBoot参数的校验。