我嘗試使用jsonp數據類型執行ajax請求,這是由於跨羣集環境中的域問題導致的。如何通過JSONP請求使用@RequestBody?
我可以對沒有@RequestBody參數映射的方法發出jsonp請求,但是當我嘗試使用@RequestBody參數實現RequestMapping時,我得到一個415 Unsupported Media Type錯誤。
通常當我得到這個問題時,它是由於某些屬性在json對象發佈和它映射到Spring的Java對象之間沒有正確映射。但我能找到的惟一差異是使用jsonp它添加了一個名爲callback的parm,並且一個名稱爲下劃線「_」
因此,我將標記@JsonIgnoreProperties(ignoreUnknown = true)添加到了我的Java對象並計算那應該可以解決這個問題,但是它仍然會拋出這個錯誤。
還有什麼我需要做的嗎?
編輯:我現在看到的調試日誌輸出該堆棧跟蹤從春: org.springframework.web.HttpMediaTypeNotSupportedException:內容類型「應用程序/八位字節流」不支持
$.ajax({
url : 'http://blah/blah.html',
data : { abc : '123' }, (I also tried to JSON.stringify the object but no difference)
dataType : 'jsonp',
success : function(response) {
alert('ok '+JSON.stringify(response));
},
fail : function(response) {
alert('error'+JSON.stringify(response));
}
});
春天控制器是:
@RequestMapping({ "blah/blah" })
@ResponseBody
public ReturnObject getBlahBlah (@RequestBody MyObject obj) throws Exception {
}
參數目的是:
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyObject {
private String abc;
// getter and setter for abc auto generated by MyEclipse
}
我有一個從未命中的控制器方法的斷點。
謝謝你的澄清!我懷疑它是這樣的...好的,我會相應地改變它(從未使用ModelAttribute將多個參數組合到一個對象中,但那就是我將需要的)。我唯一的擔心是,由於查詢字符串長度限制(255個字符?),我會遇到許多parms問題。或者我可以使用POST方法類型與jsonp? – Trant
JSONP僅GET - POST是不可能的。你可以編寫一個代理控制器來完成這個任務(你的AJAX通過POST調用應用程序中的控制器,然後將請求轉發給外部URI,然後將請求轉發回你的應用程序)。 – nickdos