個人理解emulateJSON作用 與java後臺介面引數的關係

弟中弟中弟發表於2019-06-14

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作用,自己琢磨的 也不知道對不對在我看來就是提高了介面引數的靈活性,也不知道分析的對不對,有錯請原諒, 希望各位大佬指點一下萌新

相關文章