Невозможно сделать API-вызов rest из Angular в Spring REST-контроллер - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь сделать перерыв в вызове моего весеннего контроллера, он работает, когда я помещаю URL в браузер и могу видеть ответ JSON.Но когда я пытаюсь сделать то же самое, интегрируясь в код Angular, он не выдает никаких исключений ни в консоли браузера, ни в консоли сервера.

Вот мой код.

Импорт

import { Component, OnInit  } from '@angular/core';
import { Http, Response  } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';

class Result {
statusCode : number;
errorMsg: string;
result: string;

}


@Component({
selector: 'app-root',
templateUrl: './app.component.html',
 styleUrls: ['./app.component.css'],

 })
 export class AppComponent {
 ngOnInit() {
   this.getEmployees();
 }

public getEmployees(): Observable<Result[]> {

   return this.http
    .get(this.API_URL + '/employees')
    .map(response => {
     const todos = response.json();
     console.log(todos);
     return "";
})
.catch(this.handleError);
}

private handleError (error: Response | any) {
  console.error('ApiService::handleError', error);
  return Observable.throw(error);
}

А вот мой пружинный код

  @RequestMapping(value ="/employees", method = RequestMethod.GET)
public ResultDto getEmployees(HttpServletRequest req) {
    ResultDto result = null;
    try {
        ServletContext ctx = req.getServletContext();
        @SuppressWarnings("unchecked")
        Map<String,String> users = (Map<String, String>) ctx.getAttribute("userRoles");
        result = new ResultDto();
        result.setStatusCode(EmapConstants.SUCCESS);
        result.setResult(users);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

Мой класс ResultDto имеет три свойства

private int statusCode;
private String errorMsg;
private Object result;

Есть идеи, почему он не затрагивает метод?

1 Ответ

0 голосов
/ 03 января 2019

Предполагая, что вы используете HttpClient из @angular/common/http:

Если вы используете HttpClient, вы можете добавить тип в http.get (), который является вашим ожидаемым ответом json.Используя это, вы получите только тело ответа в качестве результата.Вы также можете добавить опцию observe: 'response' в запрос на получение, чтобы получить реальный ответ.

Возможно, вы захотите использовать последнее, только если вам нужна другая информация, кроме тела, например, статус ответа.Если вам нужно только тело, ваш запрос может выглядеть примерно так:

constructor(private httpClient: HttpClient) {}

getEmployees() Observable<Result[]>{
    return this.httpClient
        .get<Result[]> (this.API_URL + '/employees', {params: _params})
        .pipe(catchError(() => this.handleError()));

}

Да, и вы всегда должны подписываться на наблюдаемое, это правильно.Как уже упоминалось в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...