Пользовательский заголовок от Spring Rest до клиента AngularJS

Я хочу отправить собственный заголовок из Spring Rest Controller в клиент пользовательского интерфейса в AngularJS. Я рассмотрел ответы здесь, в StackOverFlow, однако ни одно из решений не сработало для меня.

вот мои настройки свойств Spring CORS;

cors:
allowed-origins: "*"
allowed-methods: GET, PUT, POST, DELETE, OPTIONS
allowed-headers: "*"
exposed-headers: Header-Error
allow-credentials: true
max-age: 1800

Spring Controller, я отправляю ошибку заголовка в качестве своего собственного заголовка:

public ResponseEntity<Void> startOauthToken(@PathVariable("seller") String seller){
    // do something....
     MultiValueMap<String, String> headers = new HttpHeaders();
     headers.add("Header-Error","Account already is register with the system!!");
     return new ResponseEntity<Void>( headers, HttpStatus.BAD_REQUEST);
}

На стороне AngularJS я отправляю запрос следующим образом:

var url = APP_CONFIG.apiRootUrl + 'api/v1/startOauthToken/'+value;
$http.get(url).success(function (response){
     console.log("Vaue of the response is " + JSON.stringify(response));
})
.error(function(response){
     console.log("Value of error " + JSON.stringify(response));
});

когда я получаю ответ, я не вижу в ответе свой собственный заголовок:

{
  "data": "",
  "status": 400,
  "config": {
      "method": "GET",
      "transformRequest": [null],
      "transformResponse": [null],
      "url": "http://localhost:8082/api/v1/startOauthToken/somevalue",
      "headers": {
         "Accept": "application/json, text/plain, */*",
         "Authorization": "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0QHRlc3QiLCJhdXRoIjoiUk9MRV9URU5BTlRfQURNSU4iLCJleHAiOjE1MzIwODU3MjV9.YdKPP63ZqQVGD9EZOtBu0aniP2R4uNllAEe-O8BiOjTKqgIiAQGCW9PcLSb1jp6Epvz3bzRcnPvKn0d2Gg4PHw"
      }
  },
  "statusText": ""
}

Однако в браузере я вижу, что заголовок моего клиента Header-Error получен как часть ответа,

введите здесь описание изображения

огромное спасибо.


person Adnan Mian    schedule 20.07.2018    source источник


Ответы (1)


Мне удалось решить проблему. Проблема была на стороне angularjs после прочтения решения из Как читать заголовки ответов в угловых?, я изменил подпись $http.get

из

$http.get(url).success(function (response){
 console.log("Vaue of the response is " + JSON.stringify(response));
})
.error(function(response){
 console.log("Value of error " + JSON.stringify(response));
});

to

$http.get(url).success(function (data , status, headers, config){
     console.log("Info data " + JSON.stringify(data));
     console.log("Info status " + JSON.stringify(status));
     console.log("Info headers " + headers('Header-Error'));
     console.log("Info config " + JSON.stringify(config));
})
.error(function(data , status, headers, config){
     console.log("Info data " + JSON.stringify(data));
     console.log("Info status " + JSON.stringify(status));
     console.log("Info headers " + headers('Header-Error'));
     console.log("Info config " + JSON.stringify(config));
});

Обратите внимание, что переменная заголовков представляет функцию, а не объект JS, поэтому вам нужно передать имя заголовка, чтобы получить значение. поэтому в моем случае я передал «Header-Error».

Спасибо.

person Adnan Mian    schedule 21.07.2018