我正在尝试对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;
有什么想法为什么不能达到目的?
答案 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()));
}
是的,您始终必须遵守正确的观察。正如评论中提到的那样。