无法从Angular到Spring REST控制器进行Rest API调用

时间:2019-01-03 12:06:48

标签: angular spring-boot

我正在尝试对spring控制器进行一次调用,当我将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 :(得分:-1)

假设您正在使用@angular/common/http中的HttpClient:

如果使用HttpClient,则可以将一种类型添加到http.get()中,这是预期的响应json。使用此方法,您只能得到响应主体作为结果。您还可以将选项observe: 'response'添加到您的get请求中,以获取实际的响应。

如果您需要除身体以外的其他信息,例如,您可能只想使用后者。响应状态。如果您只需要正文,则您的请求可能如下所示:

constructor(private httpClient: HttpClient) {}

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

}

是的,您始终必须遵守正确的观察。正如评论中提到的那样。