【发布时间】:2018-01-05 04:27:39
【问题描述】:
如何从后端调用rest api发送数据并获取json对象中的用户数据
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { User } from '../_models/index';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
@Injectable()
export class UserService {
constructor(private http: HttpClient) { }
create(user: User) {
console.log("in create user");
return this._http.get("http:// localhost:8082/register").map(res =>
res.json());
// return this.http.post('/api/users', user);
}
}
以上是 angular2 service.ts 代码发送用户数据休息
下面是RegisterComponent component.ts代码:
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { AlertService, UserService } from '../_services/index';
@Component({
moduleId: module.id.toString(),
templateUrl: 'register.component.html'
})
export class RegisterComponent {
model: any = {};
loading = false;
constructor(
private router: Router,
private userService: UserService,
private alertService: AlertService) { }
register() {
this.loading = true;
this.userService.create(this.model)
.subscribe(
data => {
this.alertService.success('Registration successful', true);
this.router.navigate(['/login']);
},
error => {
this.alertService.error(error);
this.loading = false;
});
}
}
从上面的组件创建正在调用服务方法创建,我想在后端 api 中调用 post 方法
下面是rest api
@RequestMapping(value = "/register", method = RequestMethod.POST, produces = { MediaType.APPLICATION_JSON_VALUE,
MediaType.APPLICATION_XML_VALUE })
public ResponseEntity<Void> registrationUser(@RequestBody UserDetails user, HttpServletRequest request,
HttpSession session, HttpServletResponse response) {
if (user.getEmail() != null && user.getName() != null && user.getPhoneNumber() != null
&& user.getPassword() != null) {
String name = user.getName();
String email = user.getEmail();
String phoneNumber = user.getPhoneNumber();
String password = user.getPassword();
{....
}
SendMail.sendMail(to, subject, msg);
System.out.println("mail send");
return new ResponseEntity<Void>(HttpStatus.OK);
}
return new ResponseEntity<Void>(HttpStatus.CONFLICT);
} else
return new ResponseEntity<Void>(HttpStatus.CONFLICT);
}
return new ResponseEntity<Void>(HttpStatus.CONFLICT);
}
错误: src/app/_services/user.service.ts(6,57) 中的错误:错误 TS2307:找不到模块“@angular/http”。 src/app/_services/user.service.ts(28,14):错误 TS2551:“UserService”类型上不存在属性“_http”。你是说“http”吗?
【问题讨论】:
-
错误正确地提及“UserService”类型上不存在属性“_http”因为您在构造函数中注入了 http 而不是 _http。你有没有检查纠正它。
-
检查浏览器的控制台是否有任何
Access-Control-Allow-Origin错误? -
签入
spring,您已经为/register编写了POST 方法/register", method = RequestMethod.POST,并且从角度您正在为/registerAPI 调用get方法this.http.get。 -
感谢您的努力,我能够在后端休息中发送数据:错误出现在 :: import { Injectable } from '@angular/core';从“@angular/common/http”导入 { HttpClient };从'../_models/index'导入{用户}; //从'@angular/http'导入{Http,Response};从'rxjs'导入{ Observable };导入'rxjs/add/operator/map';导入'rxjs/add/operator/toPromise';
-
register() { this.loading = true; this.userService.create(this.model) .subscribe( data => { this.alertService.success('注册成功', true); this.router.navigate(['/login']); }, error => { this.alertService.error(error); this.loading = false; }); }