1. 程式人生 > >大三筆記(ajax傳遞json物件給controller,controller封裝為java物件後存入資料庫)

大三筆記(ajax傳遞json物件給controller,controller封裝為java物件後存入資料庫)

首先來看一個註解

@RequestBody 

  1、@requestBody註解常用來處理content-type不是預設的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。一般情況下來說常用其來處理application/json型別。

  2、

    通過@requestBody可以將請求體中的JSON字串繫結到相應的bean上,當然,也可以將其分別繫結到對應的字串上。     例如說以下情況:     $.ajax({         url:"/login",         type:"POST",         data:'{"userName":"admin","pwd","admin123"}',

        content-type:"application/json charset=utf-8",         success:function(data){           alert("request success ! ");         }     });注意上面的data是一個json字串,而不是json物件     @requestMapping("/login")     public void login(@requestBody String userName,@requestBody String pwd){       System.out.println(userName+" :"+pwd);     }     這種情況是將JSON字串中的兩個變數的值分別賦予了兩個字串,但是呢假如我有一個User類,擁有如下欄位:       String userName;       String pwd;     那麼上述引數可以改為以下形式:@requestBody User user 這種形式會將JSON字串中的值賦予user中對應的屬性上     需要注意的是,JSON字串中的key必須對應user中的屬性名,否則是請求不過去的。

3、

    在一些特殊情況@requestBody也可以用來處理content-type型別為application/x-www-form-urlcoded的內容,只不過這種方式

    不是很常用,在處理這類請求的時候,@requestBody會將處理結果放到一個MultiValueMap<String,String>中,這種情況一般在     特殊情況下才會使用,     例如jQuery easyUI的datagrid請求資料的時候需要使用到這種方式、小型專案只建立一個POJO類的話也可以使用這種接受方式。

但其實呢,當controller引數為物件時,前臺ajax傳過來一個json資料,這時候的controller也是可以不使用@RequestBody

的,

下面看程式碼。

UserController.java

	@RequestMapping("add")
	@ResponseBody
	public ResultVo<student> AddStudent(student stu){
		System.out.println("add方法"+stu.getName());
		student stu1 = new student();
		stu1.setAge(stu.getAge());
		stu1.setEmail(stu.getEmail());
		stu1.setName(stu.getName());
		stu1.setPassword(stu.getPassword());
		stu1.setStudent_id(stu.getStudent_id());
		stu1.setStage(stu.getStage());
		stu1.setSex(stu.getSex());
		stu1.setPhone(stu.getPhone());
		ResultVo<student>  resultVo = service.AddStudent(stu1);

			return resultVo;
		
	}
function tijiao(){
	var name= $("#name").val();
	var age= $("#age").val();
 var pwd =$("#password").val();
var sex= $("input[name='sex']:checked").val();
 var phone= $("#phone").val();
 var email = $("#email").val();
 var stage= $("#stage option:selected").val();
  var stu={
	"student_id" :18999,		  
	"name": name,
	"age":  age,
  "password": pwd,
  "sex": sex,
  "phone": phone,
  "email":email,
  "stage":  stage
  }
	  alert(stu);
	  
	  $.ajax({

  	 		 type:'POST',
          url: '/myspringTest/add.do',
        	data: stu,
        	
          dataType:"json",
      
          success: function (data) {
        	 if(data.success){
        		 console.log(data.result);
        	 }
          },error:function(data){
        	  console.log(data.result);
          }
          
    
    
  });
}
  </script>

這樣也是可以的。

另外提一點,mapper中的insert語句,當引數為一個實體類時,insert語句要寫全,要insert into table(列名1,列名2.....) values(......) 這樣子寫,不能省略列名。以上。