Spring mvc與form表單/json資料的互動
ajax
非同步提交請求常用的contentType
有兩種:contentType:application/x-www-form-urlencoded
contentType:application/json
,如何使用springmvc
處理請求資料呢?
首先,我們來看一下js
物件的兩種資料格式:
- 普通
js
物件,物件屬性名不使用引號標註
var baseJob = { jobName:$("#jobName").val(), jobGroupName:$("#jobGroup").val(), triggerName:$("#triggerName").val(), triggerGroupName:$("#triggerGroup").val(), cronExpression:$("#cronExpression").val(), description:$("#description").val() }
- 符合
json
串的js
物件,物件屬性名必須用引號標註
var baseJob = { "jobName":$("#jobName").val(), "jobGroupName":$("#jobGroup").val(), "triggerName":$("#triggerName").val(), "triggerGroupName":$("#triggerGroup").val(), "cronExpression":$("#cronExpression").val(), "description":$("#description").val() }
對於上面兩種js
物件,在指定contentType
時,需要關注一下ajax
提交資料的格式和後端的接收方式
-
contentType:application/x-www-form-urlencoded
ajax
不指定contentType
時,預設使用的請求格式,也就是form
表單提交資料。在瀏覽器除錯介面可以看到它是Form Data
方式提交資料,對於上面兩種js
物件,後端都可以正常接收
-
contentType:application/json
以
JSON
格式提交請求資料,在瀏覽器除錯介面可以看到它是Request Payload
,後端必須使用@RequestBody
json
串的js
物件注意(使用
contentType:application/json
時):-
後端必須使用
@RequestBody
,並且只能用一個引數與前端傳的資料進行匹配,否則http
請求400 -
前端提交的資料必須是符合
json
串的js
物件,如果是普通的js
物件,必須使用JSON.stringify
方法轉換,也可以直接拼接引數例如:"{\"jobName\":\"123\",\"jobGroupName\":\"456\"}"
,否則引數是以key=value&key1=value1
格式傳遞,導致http
請求400。JSON.stringify
作用:JSON.stringify()就是把js物件,例如 var baseJob = { jobName:123, jobGroupName:456 } 轉成 var baseJob = "{\"jobName\":\"123\",\"jobGroupName\":\"456\"}"
-
@RequestParam
註解不能接收application/json
的資料,只能使用@RequestBody
-
@PathVariable
註解可以使用
-