2016-05-10 24 views
0

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つだけではうまくいかない場合がありますか?

私も

+0

「応答にHTTPステータスコード500がある」と思っています。サーバー上のAPIがCORSを処理していますか? –

答えて

0

チェックリクエストヘッダを@ResponseBodyを使用して、ヘッダーを設定し、XML設定しようとした、Acces-Control-Allow-Originは、サーバから送信されなければなりません。 http://enable-cors.org

+0

'Acces-Control-Allow-Origin'は、クライアントではなくサーバーによって送信されます。 –

関連する問題