天天看點

springMvc如何和前端頁面互動,傳輸json資料springMvc和前端傳輸資料

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的錯誤。

以上是我學習到的體會,如果有哪裡不對的地方,還請各位指出來。

springMvc如何和前端頁面互動,傳輸json資料springMvc和前端傳輸資料
springMvc如何和前端頁面互動,傳輸json資料springMvc和前端傳輸資料