转载

Springmvc之接受请求参数

  • 新建一个表单提交
    • 请求地址: http://localhost:8080/ProjectName/user/login.do
<formaction="<%=request.getContextPath()%>/user/login.do"method="post">
	username:<inputtype="text"name="username"> <br>
	password:<inputtype="text"name="password"> <br>
	age:<inputtype="text"name="age">
	<inputtype="submit"value="提交">
</form>

【不推荐】HttpServletRequest

  • 直接使用 HttpServeletRequest 作为方法参数, spring 会自动为其注入
  • 需要手动转换参数的类型
@RequestMapping(value="/login.do")
public String login(HttpServletRequest request,HttpServletResponse response){
	String username=request.getParameter("username");
	String password=request.getParameter("password");
	int age=Integer.parseInt(request.getParameter("age"));  //转换类型
	System.out.println(username+"--->"+password);
	return "success";
}

直接在方法中声明对应的参数(name的属性必须和方法参数一致)

  • 表单中的 name 属性要和方法中的参数一致
  • 涉及到类型转换,直接在方法中申明不同类型的参数即可
  • 优点: 方便,并且可以使Springmvc自动处理数据类型
@RequestMapping(value = "/login.do")
public String login(String username,String password,Integer age){
	System.out.println(username + "--->" + password+"----->"+age);
	return "success";
}

【推荐】@RequestParam

  • 使用该注解可以获取请求参数,方法中的参数可以与表单中的 name 属性不一致
  • 使用 @RequestParam 这个获取的值必须包含在请求参数中,否则报错,除非设置 required 属性为 false
/**
 * 使用@RequestParam获取请求参数
 * @RequestParam()中的value属性为form表单中对应的name属性
 * 自动转换数据类型,只需要定义方法参数为所需的数据类型即可,spring会为我们自动转换
 */
@RequestMapping(value = "/login.do")
public String login(@RequestParam(value ="username")String name,
		@RequestParam("password") String pwd,@RequestParam("age") Integer age) {
	System.out.println(name + "--->" + pwd+"----->"+age);
	return "success";
}

属性

  • value 指定请求中对应的属性名称,这个就像表单中定义的name属性

  • required
    指定是否这个参数必须包含在请求地址中,默认是 true ,即是 如果不包含这个参数那么就会报错。

  • defaultValue 指定默认的值,如果设置了 required=false ,并且没有设置这个值,那么默认的是 null ,但是也是可以使用这个属性来设置参数默认的值。当然对于设置了int类型的参数,那么并没有指定其值,那么将会报错,因为 int 类型没有 null ,只有 Integer 类型的才有,因此需要设置成Integer

/*
 * 这里的获取请求参数中的username,age的值
 * 其中username的这个注解默认的是required=true,因此这个是不可以没有的
 * age的这个注解设置了required=false,表示可以没有这个参数,但是如果没有这个参数,那么默认的是null,但是int类型的没有null,因此也会是报错的,有两种解决方式:
 * 		1) 通过defalutValue设置其默认的值
 * 		2) 如果我们就想要设其为null,可以使用封装类Integer类型即可
 */
@RequestMapping(value = "/testRequestParams")
public String testRequestParams(@RequestParam(value="username")String username,@RequestParam(value="age",required=false)int age) {
	System.out.println("username,age "+ username+" , "+age);
	return SUCCESS;
}

【推荐】使用自定义数据类型(JavaBean)

  • 如果传过来的请求参数很多,那么我们使用上面的方法获取请求参数,需要申明很多的方法参数。但是我们可以将传递过来的请求参数封装成一个 JavaBean ,那么我们直接传入一个JavaBean对象即可接收全部的请求参数。
  • 声明一个User类,其中必须为每一个属性添加 set 方法,并且其中的变量名要和表单中的 name 属性一致
public class User{
	private String username;
	private String password;
	private int age;
	public int getAge(){
		return age;
	}
	public void setAge(int age){
		this.age = age;
	}
	public String getUsername(){
		return username;
	}
	public void setUsername(String username){
		this.username = username;
	}
	public String getPassword(){
		return password;
	}
	public void setPassword(String password){
		this.password = password;
	}
	@Override
	public String toString(){
		return "User [username=" + username + ", password=" + password + "]";
	}

}
  • 那么我们此时的 UserController 中的 login 方法如下:
@RequestMapping(value = "/login.do")
	public String login(User user){
		System.out.println(user);
		return "success";
	}

总结

  • 以上的所有方法并不冲突,可以混合使用
/**
 * 混合使用案例
*/
@RequestMapping(value = "/login.do")
public String login(User user,@RequestParam("gender")String gender){
	System.out.println(user);
	return "success";
}
  • 不建议使用 HttpServletRequest 方法获取,另外的方法都是非常好用的方法,根据实际情况进行选取即可
原文  https://chenjiabing666.github.io/2018/04/26/Springmvc之接受请求参数/
正文到此结束
Loading...