springMvc和前端傳輸資料
這段時間做項目用到springMvc和easyui結合,寫了一些前後端資料互動的子產品,都是用json來傳輸的,有一段時間是在網上找學習資料的,寫了一段時間後,略有所悟, 就把自己收獲到的知識跟大家分享一下。
springMvc和前端用json傳輸的方式我所知道的有種:
例如,以下有一段前端代碼,用作表單資料送出的:
<span style="white-space:pre"> </span><form action="" id="fm">
<input name="name" value=""/>
<input name="password" value="" />
<input type="button" value="送出" />
</form>
然後,Ajax送出的時候使用easyui的form表單送出,即:
<span style="white-space:pre"> </span>$("#fm").form('submit', {
url:getRootpath()+"/user/addUser",
onSubmit : function() {
return $(this).form('validate');
},
success : function(result) {
result=eval("("+result+")");
if (result) {
$.messager.show({
title : '傳回結果',
msg : "更新成功!"
});
} else {
$.messager.show({
title : '傳回結果',
msg : "更新失敗!"
});
}
}
1.直接用map接收:
<span style="white-space:pre"> </span>@RequestMapping("/addUser")
@ResponseBody
public String saveUser(@RequestParam Map user){
try {
<span style="white-space:pre"> </span>//String id=(String) staffInfo.get("id");
this.userService.save(user);
} catch (Exception e) {
return null;
}
return "更新成功!";
}
這樣子在方法的參數裡面用一個map來接收,可以把前端所有資料以【key(name),value(value)】的方式封裝進去,然後在背景取出來的時候,直接調用Map的get() 方法就可以把值取出來,例如:map.get("name");不過這種方法比較麻煩,取出來之後又要轉類型,而且取值的過程中又需要周遊一次map,不大建議使用,雖然可以說接 收任何參數。
2.用entity來接收,即一個user類:
<span style="white-space:pre"> </span>@RequestMapping("/addUser")
@ResponseBody
public String saveUser(User user){
try {
//String id=(String) staffInfo.get("id");
this.userService.save(user);
} catch (Exception e) {
return null;
}
return "更新成功!";
}
這種方法适合于前端頁面的屬性和entity的屬性一緻的情況下才可以進行,否則會報錯
User類如下:
public class User {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.如果前端的資料跟背景的entitiy的屬性類型和數目不同的話,需要在前端自己封裝json資料,然後以Ajax的方式傳到背景,這裡需要注意的是,在傳輸到背景的時候, 前 端的json資料要是json字元串才行,這樣子springMvc才能接收呢,背景執行方法的接收參數裡面可以用一個自己寫的vo來 接收,即value object,而且在接收參數的前面 需要寫一個@RequestBody注解:
<span style="white-space:pre"> </span>@RequestMapping("/addUser")
@ResponseBody
public String saveUser(@RequestBody UserVO user){
try {
//String id=(String) staffInfo.get("id");
this.userService.save(user);
} catch (Exception e) {
return null;
}
return "更新成功!";
}
第三種方法個人覺得比較靈活,如果你在前端的json資料有嵌套到集合的,就可以用這種方法,自己寫一個vo對象,裡面再寫一個集合,不過需要注意的是,屬性的名字必 須與前端頁面傳過來的屬性名字一緻才行,而且vo的屬性集合隻能多于前端傳過來的屬性集合,不能少于,否則會報400的錯誤。
以上是我學習到的體會,如果有哪裡不對的地方,還請各位指出來。