как правильно использовать rest api post с Angular 5?

У меня есть следующий сервис в приложении angular 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-код представляет собой шовный компонент, который использует остальные API:

@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();
}

Я не могу заставить этот вызов работать, я пробовал также поставить, но я понимаю, что установка предназначена для обновления, и поскольку идентификатор создается на стороне сервера, который я использовал в сообщении, сторона сервера не запускается. Любая идея, как решить эту проблему? (Я смог без проблем использовать аннотацию GET в той же службе).


person user2304483    schedule 21.05.2018    source источник
comment
ваш сервис работает через почтальона?   -  person itdoesntwork    schedule 21.05.2018
comment
я не пользовался почтальоном   -  person user2304483    schedule 21.05.2018
comment
Вы можете попробовать почтальона и скрипача, чтобы увидеть, работает ли ваш сервис. Таким образом, вы увидите, верны ли ваши заголовки и т. д. Если почтальон не работает, возможно, ваш сервис не работает. Также было бы полезно опубликовать ответ, который вы получите из сети, чтобы помочь нам.   -  person itdoesntwork    schedule 21.05.2018
comment
Я вижу на вкладке сети в браузере, что ничего не отправляется   -  person user2304483    schedule 21.05.2018
comment
тогда вы должны начать искать, почему ваше веб-приложение не отправляет запрос.   -  person itdoesntwork    schedule 21.05.2018
comment
Как упомянул @steveland83, вы должны использовать subscribe, чтобы сообщение вызывалось. this.http.post(url, JSON.stringify(trip), httpOptions).subscribe();   -  person Eldho    schedule 21.05.2018
comment
@user2304483 user2304483 Я отменил ваше последнее редактирование, потому что оно не связано с вашим первоначальным вопросом. Пожалуйста, создайте новый вопрос, если вы не можете решить проблему.   -  person Steve Land    schedule 21.05.2018


Ответы (1)


Ваш код HttpClient выглядит нормально, и, поскольку вы ничего не видите на вкладке сети, держу пари, вы не подписываетесь на Observable, возвращаемый addTrip.

Если вы не подпишитесь на наблюдаемое, оно не будет выполнено.

Из документации:

Всегда подписывайтесь!

Метод HttpClient не начинает свой HTTP-запрос, пока вы не вызовете subscribe() для наблюдаемого объекта, возвращаемого этим методом. Это справедливо для всех методов HttpClient.

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

person Steve Land    schedule 21.05.2018
comment
Я добавил вызов Promise, и теперь я вижу запрос на вкладке сети, но получаю 500 Internal Server Error. - person user2304483; 21.05.2018
comment
Хорошо, это означает, что эта проблема решена. Пожалуйста, разрешите это и откройте новый вопрос - после того, как попытаетесь решить новую проблему самостоятельно. - person Steve Land; 21.05.2018