前言
在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表单部分代码如下:
其实,不管前台用何种方式发送请求,都可以使用以下两种方式接收参数。
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;
}