我们可以在 Controller 的控制器方法中设置与请求参数同名的形参,以获取请求中携带的参数。当浏览器发送的请求匹配到这个控制器方法时,Spring MVC 会自动将请求参数赋值给相应的方法形参。
通过控制器方法的形参获取请求参数时,我们需要注意以下几点。
1. 必须保证参数名一致
我们必须保证控制器方法的形参名称与请求中携带参数的名称完全一致(区分大小写),否则控制器方法接收到的请求参数值会是 null。
如果由于一些特殊原因,实在无法保证参数名严格一致,我们还可以通过 @RequestParam 注解来解决。
2. 无视数据类型
这种方式是无视参数的数据类型的,我们可以在控制器方法中使用 String 字符串类型的形参接收所有的请求参数,也可以根据实际情况在控制器方法中使用对应数据类型的参数来接收请求参数,而无须自行进行数据类型转换。
3. 不适用于请求参数过多的请求
当请求中携带的参数过多时,如果我们还使用这种方式来获取请求参数,那就需要我们在控制器方法中设置大量的形参,这会让使代码变得十分臃肿,不易维护。
4. 同名请求参数的处理方式
当请求中包含多个同名的请求参数时,我们可以通过以下 2 种类型的形参来获取请求参数。
package org.example.controller.requestparam;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class ForParamController
{
// http://localhost:8080/getRequestParam?name=C语言中文网&url=c.biancheng.net
/**
* 通过 HttpServletRequest 获取请求参数
* @param request
* @return
*/
@RequestMapping("/getRequestParam")
public String requestParam(HttpServletRequest request) {
String name = request.getParameter("name");
String url = request.getParameter("url");
System.out.println("name:" + name);
System.out.println("url:" + url);
return "cheng_gong";
}
// http://localhost:8080/getRequestParam?firstName=C语言中文网&lastName=c.biancheng.net
/**
* 通过 HttpServletRequest 获取请求参数
* @param request
* @return
*/
@RequestMapping(value = "/getRequestParam2")
public String test2(HttpServletRequest request) {
String a = request.getParameter("firstName");
String b = request.getParameter("lastName");
return a + b;
}
//http://localhost:8080/getRequestParam3?name=tom&language=java
@RequestMapping("/getRequestParam3")
public String test3(String name, String language) {
System.out.println("a:" + name);
System.out.println("b:" + language);
return "success";
}
// http://localhost:8080/getRequestParam4?name=tom&language=2
@RequestMapping("/getRequestParam4")
public String test4(String name, Integer language) {
System.out.println("a:" + name);
System.out.println("b:" + language);
return "success";
}
}