如何使用Angular 5正确使用rest api post?

时间:2018-05-21 09:27:27

标签: angular angular-httpclient

我在角度5应用程序中有以下服务:

const httpOptions = {
    headers: new HttpHeaders({ 
                'Accept': 'application/json', 
                'Content-Type': 'application/json' 
                 })
        };

addTrip(trip: Trip): Observable<any> {
    console.log('Adding trip ' + JSON.stringify(trip));
    return this.http.post(`${this.baseUrl}/Trips/trip/`, JSON.stringify(trip), httpOptions);
  }

旅行看起来像(有角度):

export interface Trip {
  description: string;
}

java代码是使用rest api的seam组件:

@Name("tripFacadeREST")
@Scope(ScopeType.EVENT)
@Path("Trips")
public class TripFacadeREST {

    @In private TripDaoHibernateImpl tripDao;

...

@POST
@Path("Trip")
@Consumes("application/json")
public Response addNewTrip(Trip newTrip) {
    tripDao.addTrip(newTrip);
    return Response.ok().entity("trip added successfully").build();
}

我无法接听此电话,我也尝试过但我明白put是用于更新的,因为id是在服务器端创建的,我使用了帖子, 服务器端未被触发。知道如何解决这个问题吗? (我能够在同一个服务中使用GET注释而没有任何问题。)

1 个答案:

答案 0 :(得分:1)

您的HttpClient代码看起来没问题 - 因为您在网络选项卡中没有看到任何内容,我敢打赌您不会订阅sub rsp, X返回的Observable。

如果你没有订阅observable,它就不会被执行。

来自文档:

  

始终订阅!

     

在您对该方法返回的observable上调用subscribe()之前,HttpClient方法不会开始其HTTP请求。对于所有HttpClient方法都是如此。

https://angular.io/guide/http#always-subscribe