Springを使用してJavaで書かれた独自のREST APIに対して複数のGET要求を実行しようとしています。両方のリクエストが3/10倍にうまく処理されます。 7/10 HTTP要求の1つが、「No Access-Control-Allow-Originヘッダーが要求されたリソースに存在する」エラーで失敗します。私はこのようなRESTコントローラーを持っている:
angular.module('trackerApp', ['ngCookies', 'ui.router', 'pascalprecht.translate'])
.config(function($stateProvider, $urlRouterProvider, $translateProvider){
$urlRouterProvider.otherwise('/');
$translateProvider.translations('en', {
TITLE: 'Welcome!',
INTROMESSAGE: 'Use this Activity Tracker application for free!',
en: 'English',
nl: 'Nederlands'
})
.translations('nl', {
TITLE: 'Welkom!',
INTROMESSAGE: 'Gebruik deze volledig gratis activiteitstracker!',
en: 'English',
nl: 'Nederlands'
});
$translateProvider.preferredLanguage('en');
$stateProvider
.state('persondetails', {
url: '/runners/:userId',
templateUrl: 'views/activitiesByPerson.html',
controller: 'personDetailController as personDetails'
});
})
.controller('personDetailController', function($http, $stateParams){
var personDetails = this;
var userId = $stateParams.userId;
var reqUrlTwo = 'http://193.191.187.14:10578/RestTracker-1.0-SNAPSHOT/person/' + userId;
$http({
url: reqUrlTwo,
method: 'GET'
}).success(function(response){
personDetails.person = response;
});
var reqUrl = 'http://193.191.187.14:10578/RestTracker-1.0-SNAPSHOT/person/' + userId + '/activities';
$http({
url: reqUrl,
method: 'GET'
}).success(function(response){
personDetails.activities = response;
});
});
ので3/10倍GETリクエストの両方がうまく処理されますと、結果が表示されます:
@RestController
@CrossOrigin
@RequestMapping("/person")
public class PersonRestController {
@Autowired
ActivityTracker tracker;
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void addPerson(@RequestBody Person person){
tracker.addPerson(person);
}
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Collection<Person> getPersons(){
return tracker.getPersons();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Person getPerson(@PathVariable long id){
return tracker.getPerson(id);
}
@RequestMapping(value="/{id}/activities", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Collection<RunActivity> getActivitiesByPerson(@PathVariable("id") long id){
return tracker.getActivities(tracker.getPerson(id));
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
public void updatePerson(@RequestBody Person person){
tracker.updatePerson(person);
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public void deletePerson(@PathVariable("id") Long id){
tracker.deletePerson(tracker.getPerson(id));
}
@RequestMapping(value = "/fastest", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Person getFastestRunner(){
return tracker.getFastestRunner();
}
@RequestMapping(value = "/longest", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Person getLongestRunner(){
return tracker.getLongestRunner();
}
}
私の角度のアプリケーションでは、このようになります。しかし、7/10倍のうちの1つが失敗し、私に表示されます
XMLHttpRequestはhttp://193.191.187.14:10578/RestTracker-1.0-SNAPSHOT/person/2をロードできません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。 Origin 'http://localhost:8000'はアクセスできません。応答にはHTTPステータスコード500が付きました。
時には両方とも成功し、時には1つだけではうまくいかない場合がありますか?
私も
「応答にHTTPステータスコード500がある」と思っています。サーバー上のAPIがCORSを処理していますか? –