угловой запрос HttpClient возвращает 404. ссылка активна - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь получить данные с сервера Tomcat в угловое приложение.На моем сервере Tomcat у меня есть ссылка, которая возвращает json, и в моем угловом приложении я пытаюсь получить json с помощью httpclient и httpheader.

Когда я копирую ссылку из углового кода в свой браузер, браузерпринимает это.Затем системное сообщение отображается в терминале на сервере Tomcat.Однако, когда я запускаю угловой код, сообщение терминала не отображается, и в журнале консоли углового приложения я вижу ошибку, показанную ниже.

Ниже приведены методы java для генерации ответа json.Операторы system out показывают json как ожидалось.

    public String toJSON(Object object) throws JsonProcessingException
    {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(object);
    }

    private void getAllUser(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        System.out.println("en deze request is GET-ALL-USERS ");
        String userJSON = this.toJSON(model.getPersons());
        System.out.println("en deze request is GET-ALL-USERS  = " + userJSON);
        response.setContentType("application/json");
        response.getWriter().write(userJSON);
    }

угловой код для получения json:

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Gebruiker } from './gebruiker';
import { MessageService } from './message.service';
import { Observable, of } from 'rxjs';
import { catchError, map, tap } from 'rxjs/operators';

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

@Injectable({
  providedIn: 'root'
})

export class GebruikerService {
  private urlGetAllUsers = 'http://localhost:8081/Controller?action=angular&asyncAction=getAllUsers';

  constructor(
    private http: HttpClient,
    private messageService: MessageService) {

  }

  /** GET gebruikers from the server */
  getGebruikers (): Observable<Gebruiker[]> {
    const url = `${this.urlGetAllUsers}`;
    return this.http.get<Gebruiker[]>(url)
      .pipe(
        tap(_ => this.log('fetched gebruikers')),
        catchError(this.handleError('getGebruikers', []))
      );
  }
  private handleError<T> (operation = 'operation', result?: T) {
    return (error: any): Observable<T> => {

      // TODO: send the error to remote logging infrastructure
      console.error(error); // log to console instead

      // TODO: better job of transforming error for user consumption
      this.log(`${operation} failed: ${error.message}`);

      // Let the app keep running by returning an empty result.
      return of(result as T);
    };
  }
}

сообщение об ошибке, которое я получаю в своей консоли:

{body: {…}, url: "http://localhost:8081/Controller?action=angular&asyncAction=getAllUsers", headers: HttpHeaders, status: 404, statusText: "Not Found"}
body: {error: "Collection 'undefined' not found"}
headers: HttpHeaders
lazyInit: ƒ ()
lazyUpdate: null
normalizedNames: Map(0) {}
__proto__: Object
status: 404
statusText: "Not Found"
url: "http://localhost:8081/Controller?action=angular&asyncAction=getAllUsers"
__proto__: Object

Я надеюсь, что кто-то может мне помочь.спасибо

1 Ответ

0 голосов
/ 25 мая 2019

Когда вы запускаете метод GET из браузера, что браузер передает в запросе? Не могли бы вы сделать снимок экрана на вкладке сети запроса на получение, который работает? Вы можете использовать инструменты разработчика Google Chrome для захвата запроса на получение, отправленного браузером, и вставить его здесь в виде текста или изображения.

Я думаю, что браузер передает не «Content-Type»: «application / json», а какой-то другой тип (возможно, по умолчанию это текст). Также возможно, что сервер Tomcat, который, как я предполагаю, является приложением на основе Java EE, не перенаправляет запрос на соответствующий обработчик запросов.

Также не могли бы вы указать настройки сопоставления ваших запросов, которые, как я полагаю, могут быть в файле конфигурации web.xml для приложения сервлета (развернутого на сервере Tomcat).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...