簡體   English   中英

如何將@RequestBody與JSONP請求一起使用?

[英]How to use @RequestBody with a JSONP request?

由於集群環境中的跨域問題,我試圖使用jsonp數據類型執行ajax請求。

我可以向沒有@RequestBody參數映射的方法發出jsonp請求,但是當我嘗試使用@RequestBody參數實現RequestMapping時,出現415不支持的媒體類型錯誤。

通常,當我遇到此問題時,是由於某些屬性未正確在發布的json對象與其在Spring中映射到的Java對象之間正確映射。 但是我能找到的唯一差異是,使用jsonp會添加一個名為callback的參數和一個帶有下划線“ _”的參數。

所以我在我的Java對象中添加了標簽@JsonIgnoreProperties(ignoreUnknown = true),並認為應該可以解決該問題,但是仍然會引發此錯誤。

我還有什么需要做的嗎?

編輯:我現在在Spring的調試日志輸出中看到此堆棧跟蹤:org.springframework.web.HttpMediaTypeNotSupportedException:內容類型'application / octet-stream'不支持

$.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));
  }
});

Spring控制器是:

@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
}

我在Controller方法上有一個斷點,它從未命中過。

JSONP意味着jQuery將創建一個<script>元素,其中src指向您的控制器URL。

如您所見,這種方法不允許您在請求正文中傳遞任何數據,所有數據都應作為查詢參數在URL中傳遞。 data : { abc : '123' }表示將abc=123添加到URL。

在控制器端,您需要使用@RequestParam (綁定單個參數)或@ModelAttribute (將多個參數綁定到一個對象):

public ReturnObject getBlahBlah (@RequestParam("abc") int abc) throws Exception { ... }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM