大三筆記(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"}',
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(......) 這樣子寫,不能省略列名。以上。