Rest API. Metoda get z parametrami.

Rest API. Metoda get z parametrami.
BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

Cześć napisałem sobie proste Restowe API w Springu, a teraz w Angularze chciałbym się do niego odwołać. Problem polega na tym, że nie bardzo rozumiem jak podać parametry do zapytania GET.
Więc tak tak wygląda to w Springu

Kopiuj
    @CrossOrigin(origins = "http://localhost:4200")
    @RequestMapping(
            value = "/algorithm/fifo",
            params = {"virtualMemory", "physicalMemory", "stringReference"})
    public Data fifo(
            @RequestParam(value = "virtualMemory", defaultValue = "3", required = false) String virtualMemory,
            @RequestParam(value = "physicalMemory", defaultValue = "3", required = false) String physicalMemory,
            @RequestParam(value = "stringReference", defaultValue = "3", required = false) String stringReference) {
        algorithmService.setAlgorithmsData(virtualMemory, physicalMemory, stringReference);
        return algorithmService.getData();
    }

Teraz w Angularze mam HttpService z taką metodą

Kopiuj
  getAlgorithmData() {
    let params: URLSearchParams = new URLSearchParams();
    params.set('virtualMemory', '1');
    params.set('physicalMemory', '2');
    params.set('stringReference', '3');
    return this.http.get('http://localhost:8080/algorithm/fifo', { search: params})
      .map((response: Response) => response.json());
  }

Wiem, że prawdopodobnie źle tu przekazuje te parametry. Trochę patrzyłem na innym forum jak to zrobić, ale zawsze mam jakiś błąd i nie potrafię go rozwiązać.
W komponencie natomiast tak pobieram dane

Kopiuj
  getAlgorithmData() {
    this.httpService.getAlgorithmData().subscribe(
      (data: any) => this.algorithmData = data
    );
  }

No i błąd jaki dostaję to

Kopiuj
GET http://localhost:8080/algorithm/fifo 400 ()
XMLHttpRequest cannot load http://localhost:8080/algorithm/fifo. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. The response had HTTP status code 400.
ERROR Response {_body: ProgressEvent, status: 0, ok: false, statusText: "", headers: Headers…}
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Przecież widać po logu że nie o to chodzi. Zresztą Ty to jakoś dziwnie robisz, serwujesz Angulara odrębnie od REST API?


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

Nie rozumiem pytania. Backend mam Javie front w Angularze. No właśnie nie bardzo rozumiem co się dzieje. Bo dla testu zmieniłem metodę na

Kopiuj
    @CrossOrigin(origins = "http://localhost:4200")
    @RequestMapping(value = "/algorithm/fifo")
    public Data fifo() {
        return new Data(1,4,1);
    }

I wtedy dostaję odpowiedź.

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Możesz pokazać repo?
Chodzi mi o to czy angular i backend są wystawiane jako różne aplikacje webowe ;)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
BA
Zaraz zaraz o jakie repo Ci chodzi? :D
S9
Github
BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

Repo nie ma. Bo do tego co chce zrobić nie jest mi potrzebne. Na podstawie parametrów GET tworzę obiekt, który od razu zwracam. Wygląda to tak

Kopiuj
http://localhost:8080/algorithm/fifo?virtualMemory=1&physicalMemory=2&stringReference=3
Kopiuj
{"virtualMemory":1,"physicalMemory":2,"stringReference":3}

Tak dwie osobne appki. Źle nie tworzę obiektu tylko ustawiam jego wartości.

edytowany 4x, ostatnio: barslo
Patryk27
Do repozytorium wrzuca się kod źródłowy, aby inni mogli też na niego popatrzeć ;-) To nie jest tak, że nie jest mi to potrzebne.
BA
Dziękuję za podpowiedź :) Nie zrozumiałem kolegi. Jestem już w świecie "spania"
BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0
CZ
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 2 lata
  • Postów:30
BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

No właśnie zrobiłem podobnie jak na stronie springa. Nie rozumiem czemu mi ten cors... wywala.

edytowany 1x, ostatnio: barslo
MS
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 4 lata
  • Postów:38
0

Musisz dodać import "URLSearchParams" w "http.service.ts":

Kopiuj
import {Http, Response, URLSearchParams} from '@angular/http';
BA
Super dzięki. Działa.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.