1

サンプル アプリがあります: https://github.com/LateralThoughts/orsyp-frontend-training/tree/master/zupr_trackr。Spring DATA/REST によって処理される REST リソースを介して、 3 つの JPA エンティティ ( CompanyEmployeeActivity ) を公開します。

たとえば、ブラウザの REST アドオンを使用して REST API を正常にクエリできますが、次のクエリ (同じドメインまたは別のドメイン) では常に 404 が返されます。

$.getJSON("http://localhost:8080/api/companies/")
    .success(function() { alert("success"); })
    .fail(function(event, jqxhr, exception) {
        console.log(jqxhr, exception);
    })
    .complete(function() { alert("Done"); }
);

生成された HTTP リクエスト (REST アドオンを介して) と jquery 駆動の HTTP リクエストを比較して気付いた唯一の違いは、最初のケースでは「Referer」がなく、最後のケースでは存在することです。

このヘッダーを REST アドオン インターフェイスで追加すると、前述のように要求が失敗します。

どんなアイデアでも大歓迎です、事前に感謝します

ロルフ

PS: これは、GET/POST およびその他の動詞に当てはまります。

4

1 に答える 1

1

AcceptSpring Data REST は、jQuery によって送信されるヘッダーが好きではありません。

jQuery は次のヘッダーを送信します。

Accept:application/json, text/javascript, */*; q=0.01

そして、次のようなクエリを試すと:

curl -v -XGET -H "Accept:application/json, text/javascript, */*; q=0.01" http://localhost:8080/api/employees/

404 として失敗しますが、text/javascriptパーツを削除して変更すると、次のようになります。

curl -v -XGET -H "Accept:application/json, */*; q=0.01" http://localhost:8080/api/employees/

これは機能します。

Acceptメソッドを使用して、jQuery で使用される既定のヘッダーをオーバーライドする$.ajaxSetupか、API をクエリするときにこれらの設定を単純にオーバーライドできます。

$.ajax({
    url : "http://localhost:8080/api/employees", 
    accepts: {json:'application/json'}
})

理由については、ここで Spring Data REST に問題があると思います。

https://github.com/SpringSource/spring-data-rest/blob/master/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestHandlerMapping.java#L46

ヘッダーが一致する場所であり、SpringData REST には存在しないAcceptという事実が原因である可能性があると思います。text/javascript

于 2013-04-16T06:54:58.780 に答える