springmvc的controller中如何接收前台传来的参数

前言

在JavaWeb开发中前后台的数据交互是永恒的主题。解决了这个问题,web应用流程就真正顺畅了。

一、参数绑定在url请求结尾

如: http://localhost:8080/springmvc/getUserInfo?userId=10086

@RequestMapping("/getUserInfo")
public ModelAndView getUserById(@RequestParam("userId") Integer userid){
	ModelAndView mv = new ModelAndView();
	Sysout.println(userid);
	return mv;
}

像这种传统的url形式,我们就可以使用@RequestParam注解来识别并绑定到方法的入参上。

但是,如果我们现在congtroller中使用restful风格的请求,如@RequestMapping("/getUserInfo/{userId}"),那么就需要使用另外一个注解来绑定参数到方法入参了。

@RequestMapping("/getUserInfo/{userId}")
public ModelAndView getUserById(@PathVariable("userId") Integer userid){
	ModelAndView mv = new ModelAndView();
	Sysout.println(userid);
	return mv;
}

二、如果是ajax请求

$.ajax({
                type: "POST",
                url: 'login/loginIndex',
                data: {'userName': loginname, 'password':password, tm: new Date().getTime(), 'logintype': 'form'},
                cache: false,
                success: function (data) {
                    if (data!= "" && data == "SUCCESS") {
                        window.location.href = basePath + "main/index";
                        alert("认证成功");
                        return;
                    } else if ("error" == data) {
                        //提示帐号或密码错误
                        $("#userNameErrMsg").show();
                        $("#loginname").focus();
                        return;
                    } else {
                    	//提示帐号或密码错误
                        $("#userNameErrMsg").show();
                        $("#loginname").focus();
                    	alert("认证失败")
                        return;
                    }
                    $("#btnLogin").attr("disabled", false);
                },
                error: function (jqXHR, textStatus, errorMsg) {
                    alert("提交数据异常:" + textStatus + ":" + jqXHR.status + ": " + jqXHR.statusText);

                    $("#btnLogin").attr("disabled", false);
                }
            });

data中的参数userName、password跟User对象的属性名一致 

三、如果是表单提交

jsp表单部分代码如下:


     
用户: 密码: input:

 

 

其实,不管前台用何种方式发送请求,都可以使用以下两种方式接收参数。

a.将参数直接作为controller方法的入参传入

1.参数名跟controller方法的参数名一致,可以直接如下写:

@RequestMapping("/getUserInfo")
public ModelAndView getUserById(String userName, String password){
	ModelAndView mv = new ModelAndView();
	........
	return mv;
}

2.参数名跟controller方法的参数名一致,可以借助@RequestParam注解

@RequestMapping("/getUserInfo")
public ModelAndView getUserById(@RequestParam("userName") String name, String password){
	ModelAndView mv = new ModelAndView();
	........
	return mv;
}

b.用对象来接收,只要传递的参数名跟对象的属性名一致即可

假如有一个User对象:

public class User {
	private Integer userId;
	
	private String userName;
	
	private String age;

	private String password;
	
	private String gender;
	
	public Integer getUserId() {
		return userId;
	}

	public void setUserId(Integer userId) {
		this.userId = userId;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

那么在controller就可以这样接收参数:

@RequestMapping("/getUserInfo")
public ModelAndView getUserById(User user){
	ModelAndView mv = new ModelAndView();
	Sysout.println(user.getUserName()+":"user.getPassword());
	return mv;
}

c.手动通过request获取

@RequestMapping("/getUserInfo")
public ModelAndView getUserById(HttpServletRequest request){
	ModelAndView mv = new ModelAndView();
	String username = request.getParameter("userName");
    String password= request.getParameter("password");
	return mv;
}

 

你可能感兴趣的:(spring)