Vue請求:
this.$http.post("/test", {
'name': '弟中弟',
'phone': '186220666666',
'age': 18
}).then((respones) => {
console.log(respones.body)
});
複製程式碼
在沒有設定引數emulateJSON:true時 後臺介面只能通過@RequestBody註解將請求發來的json字串引數轉換成對應的JavaBean, 最終傳送的請求是(無關的請求頭在本文中都省略掉了):
POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"name":"弟中弟","phone":"186220666666","age"=18}
複製程式碼
@Data
public class Person {
private String name;
private String phone;
private Integer age;
}
複製程式碼
介面:
@PostMapping("/test")
public String test(@RequestBody Person Person){
//TODO
}
複製程式碼
解釋一下:如果Web伺服器無法處理編碼為application/json的請求,你可以啟用emulateJSON選項。
啟用該選項後,請求會以application/x-www-form-urlencoded作為Content-Type,就像普通的HTML表單一樣。
如果新增上此引數,後臺介面可以更靈活性的接收引數
this.$http.post("/test", {
'name': '弟中弟',
'phone': '186220666666',
'age': 18
},{emulateJSON:true}).then((respones) => {
console.log(respones.body)
});
複製程式碼
如果沒有使用@RequestBody 註解我們一樣可以接收引數轉換成JavaBean,因為沒有@RequestBody註解我們無法解析,但是emulateJSON:true就會是資料使用application/x-www-form-urlencoded的方式提交。 請求類似於下面這樣(無關的請求頭在本文中都省略掉了)
POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
name=弟中弟&phone=186220666666&age=18 這裡不應該是明文我就不轉換了
複製程式碼
@PostMapping("/test")
public String test(Person Person){
//TODO
}
複製程式碼
所以你也可以在main.js中全域性定義這個引數
Vue.http.options.emulateJSON = true;
這是本人今天在學習中寫介面遇到關於不理解emulateJSON作用,自己琢磨的 也不知道對不對在我看來就是提高了介面引數的靈活性,也不知道分析的對不對,有錯請原諒, 希望各位大佬指點一下萌新