1

У меня есть пример приложения: https://github.com/LateralThoughts/orsyp-frontend-training/tree/master/zupr_trackr. Он предоставляет 3 объекта JPA (Company, Employee, Activity) через ресурсы REST, обработанные Spring DATA/REST.Spring Data/REST - Javascript (jquery, backbone) restful calls в итоге с ответом 404

Хотя я могу успешно запросить REST API через браузер REST надстройку, например, следующий запрос (на том же домене или другой) всегда возвращает 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-driven, это отсутствие «Referer» в первом случае и его присутствие в последнем.

Добавление этого заголовка с интерфейсом надстройки REST приведет к сбою запроса, как описано ранее.

Любые идеи приветствуются, спасибо заранее

Rolf

P.S .: это верно для GET/POST и других глаголов.

+0

Вы получаете какие-либо исключения на стороне Java? Есть ли более подробное сообщение об ошибке в ответе HTTP? – elevine

+0

Это не последний трейлинг/случайно? случилось со мной раньше, вы никогда не знаете ... –

+0

Привет, спасибо за ваши ответы, это не про трейлинг-косую черту, оба URL-адреса (с и без /) подаются при работе вручную. Я установил уровень LOG для TRACE и посмотрю, смогу ли я обнаружить любой стек. – Rolf

ответ

1

Spring Data REST не любит заголовки Accept, отправленные 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

где подобран заголовок Accept, и я думаю, что это может быть связано с факт, что text/javascript не существует для SpringData REST.

 Смежные вопросы

  • Нет связанных вопросов^_^