3

これはかなり古い質問ですが、私が学んだことをすべて試した後、何時間も CORS POST リクエストで JSON データを送信しようとした後でも、正しく機能させることができません。パラメータを使用した GET および POST は完全に機能しましたが、POST データはわかりにくいようです。

ここのコードには表示されませんが、すべてのサーブレットに対して CORS フィルター マッピングが設定されています。それが ajax リクエストからコントローラ メソッドをヒットできない理由だとは思いません。

環境:

  • jquery: 1.8.2
  • クロム: バージョン 23.0.1271.64 m
  • 春の MVC 3.0.5.RELEASE

httprequest ソフトウェアで試してみたので、次のリクエストをサーバーに送信できれば、正常に動作することがわかっています。しかし、デフォルト以外の Content-type でリクエストを送信することはできないため、プリフライト後に実際のリクエストを実際に送信することはありません

サーバーから適切な応答を取得するために必要な要求:

POST http://localhost:8068/web-app/app/api/post-json-obj
Content-Type: application/json
{"description": "hello", "title": "JohnDoe", "identifier":"testResponse"}

コード:

<html>
<head>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>

<script type="application/javascript">   
//Required Request Info:
//POST http://localhost:8068/web-app/app/api/post-json-obj
//Content-Type: application/json
//{"description": "hello", "title": "JohnDoe", "identifier":"testResponse"}

(function($) {
var url = 'http://localhost:8068/web-app/app/api/post-json-obj';
var data = {"description": "hello", "title": "JohnDoe", "identifier":"testResponse"};
$.ajax({
type: 'POST',
url: url,
data: JSON.stringify(data),
contentType:"application/json",
success: function(response) {
alert("success");
},
error: function(xhr) {
alert('Error!  Status = ' + xhr.status + " Message = " + xhr.statusText);
}
});
})(jQuery);
</script>
</head>
<body>

</body>
</html>

サーバ側:

  @RequestMapping(value="/post-json-obj", method = RequestMethod.POST, consumes = {"application/json"})
      public @ResponseBody ResponseEntity<WebResponse> postJSONObject(@RequestBody Item item) {
          WebResponse res = new WebResponse();
          res.setMessage("success");    
  return new ResponseEntity<WebResponse>(res, HttpStatus.ACCEPTED);
  }

飛行前:

リクエスト

OPTIONS /web-app/app/api/post-json-obj HTTP/1.1
Host: localhost:8068
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Origin: http://localhost
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache

応答

  HTTP/1.1 200 OK
  Server: Apache-Coyote/1.1
  Access-Control-Allow-Origin: *
  Access-Control-Allow-Methods: GET, POST, PUT, DELETE
  Access-Control-Allow-Headers: Content-Type
  Access-Control-Max-Age: 1800
  Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
  Content-Length: 0
  Date: Wed, 14 Nov 2012 20:27:37 GMT

リアルリクエスト

リクエスト:

  POST http://localhost:8068/web-app/app/api/post-json-obj HTTP/1.1

リクエストペイロード: {"name":"hello","message":"JohnDoe"}

応答:

応答なし

4

0 に答える 0