Zapis danej z GET requestu do zmiennej

0

Witam serdecznie,

Pisze aplikacje w Java Swing, ktora bedzie otrzymywac, bazujac na odczycie z kamery, pewien numer, ktory nastepnie aplikacja przetwarza i w postaci POST requestu wysyla zapytanie do bazy danych klienta i dalej wyswietla dane z bazy klienta przypisane do tego numeru z kamery.

Obecnie w celu przesłania numeru używam GET requestu w Postmanie i tam podaje numer (cześć z kamera bedzie stworzona później).

Docelowo aplikacja ma wyświetlać liste numerów, które pojawia sie w kamerze wraz z danymi przypisanymi do nich (jeden po drugim) do momentu resetu przez klienta.
Czyli np.

  1. JLabel - numer 3626151, Jan Kowalski, Wrocław
  2. JLabel - numer 26252, Norbert Wiśniewski, Gdańsk
    i tak jeszcze kilka jeden pod drugim. W momencie resetu wszystko zniknie i aplikacja będzie oczekiwać na nowe requesty

Obecnie, gdy odpalam aplikacje i wysłałam GET requesty do localhosta jeden po drugim otwierają mi sie kolejne okna JFrame z danymi pobranymi z bazy danych klienta na ich serwerze (numer, dane), wszystko w osobnych oknach.

Szukam pomysłu w jaki sposob można by stworzyć "tymczasowa baze danych" z przypisem do zmiennych poszczególnych numerow z requestow np. X = numer z requestu nr 1, Y = numer z requestu 2, Z = numer z requestu 3 i tak dalej powiedzmy do 10 (chociaz najlepiej do nieskończoności, aż zresetuje aplikacje (zresetuje zmienne i od nowa beda przypisywały sie numery do Z,Y,X))

Czy konieczne jest tu tworzenie bazy danych czy można to jakos obejść? Chodzi mi o to, że obecnie argumentem funkcji jest numer z GET requestu i na jego podstawie wysyłane są POST requesty do bazy klienta i wówczas otrzymuje response body z danymi i sobie wyciągam co potrzebuje (właśnie to imię, nazwisko, miasto, itd) Jak to zrobić żeby te numery wyświetlały się jeden pod drugim z każdym kolejnym wysłanym GET requestem.

Jestem początkującym programista wiec wybaczcie jest to cos oczywistego :)

Z gory dziękuję za pomoc!

0

Skoro wysyłasz do serwera jakieś parametry to możesz albo w gecie wysłać ich więcej (w urlu co jest słabe) albo wysłać posta i w body wrzucić listę wszystkich parametrów które mają zostać pobrane i zwrócone do klienta w postaci listy.

Jak sobie wyobrażasz wysyłać po jednym parametrze, potem to kisić gdzieś na serwerze w oczekiwaniu aż od klienta przyjdzie kolejne żądanie typu "zwróć mi wszystkie dane na podstawie parametrów które wysłałem"? Tzn jasne technicznie można to zrobić ale to wymyślanie sobie problemów.

Co rozumiesz poprzez "aż zresetuje aplikacje"? Będziesz trzymał jakieś stałe połączenie (socket?) między klientem a serwerem?

Skomplikowałeś na własne życzenie prostą rzecz jak wysłanie zapytania i odebranie odpowiedzi ;)

0
RequiredNickname napisał(a):

Skoro wysyłasz do serwera jakieś parametry to możesz albo w gecie wysłać ich więcej (w urlu co jest słabe) albo wysłać posta i w body wrzucić listę wszystkich parametrów które mają zostać pobrane i zwrócone do klienta w postaci listy.

Jak sobie wyobrażasz wysyłać po jednym parametrze, potem to kisić gdzieś na serwerze w oczekiwaniu aż od klienta przyjdzie kolejne żądanie typu "zwróć mi wszystkie dane na podstawie parametrów które wysłałem"? Tzn jasne technicznie można to zrobić ale to wymyślanie sobie problemów.

Co rozumiesz poprzez "aż zresetuje aplikacje"? Będziesz trzymał jakieś stałe połączenie (socket?) między klientem a serwerem?

Skomplikowałeś na własne życzenie prostą rzecz jak wysłanie zapytania i odebranie odpowiedzi ;)

Wiem, ze ciezko to wytlumaczyc, ale postaram sie jescze raz. Tymczasowo wysylam parametry w GEcie jeden po drugim do localhosta -
localhost:8080/app1/rest?number=BS-ZX%201
(docelowo beda to numery, ktore bedzie odczytywac kamera wraz z zapisem daty i godziny odczytania ich) - powiedzmy przez najblizsze 5 minut od startu aplikacji , po uplywie 5 minut aplikacja sie zresetuje
(lub po wduszeniu przycisku reset - to juz zalezy ode mnie) i nowe numery z kamery beda zczytywane znow od pierwszego.

W ciagu tych 5 minut moga pojawic sie 2, 5 albo i 10 numerow. I kazdy kolejny ma byc wywietlany w moim JFramie i jednoczesnie z tym numerem aplikacja wewnatrz siebie wysyla POST request do serwera klienta o dane zwiazane z tym numerem. Aplikacja otrzymuje response body dla tego konkretnego "number=BS-ZX%201" (Klient ma jakas baze danych i np pod tym numerem mamy jakies imie, nazwisko, adres itd) I oprocz numeru BS-ZX%201 musze obok niego wywietlic date odczytu (poki co wyslania GETa) oraz poszczegolne dane z Response Body. Np:
BS-ZX%201 15-03-2023 11:18, Jan Kowalski, Gdansk, tel:324234

nastepnie wysylam koleny GET request z innym parametrem np.: localhost:8080/app1/rest?number=AX-32 do mojego okna dodaje sie kolejny wpis i widze juz dwie pozycje
BS-ZX%201 15-03-2023 11:18, Jan Kowalski, Gdansk, tel:324234
AX-32 15-03-2023 11:22, Darek Jarek, Warszawa, tel 3434324

i tak przez 5 minut wszystkie parametry otrzymane/odczytane przez aplikacje zostaja wyswietlone jeden pod drugim, po uplywie 5 minut (lub po wduszeniu przycisku reset) nastepuje reset i koleny wyslany request jest juz na pozycji 1 i tak az do kolejnego resetu.

Nie bardzo wiem jak to ugryzc - obecnie aplikacja wyswietla to co chce (numer i dane) w jednym oknie, gdy wysylam kolejny GET request otwiera sie kolejne okno i tak pewnie w nieskonczonosc, a ja bym chciala to wszystko widziec jedno pod drugim w jednym oknie i moc odniesc sie do poszczegolnych parametrow np jesli klikne w pierwszy numer to bede mogla wyswielic jeszcze jakies dodatkowe dane. Stad pytanie jak przypisac te parametry z GET requesta do poszczegolnych zmiannych obecnie moja funkcja startujaca apke wyglada tak:

@GetMapping("/app1/rest")
@ResponseBody
public void getNumber(@RequestParam String number) throws IOException, XMLStreamException {

Z groy dzieki za jakeis wskazowki!

1

Pokaż więcej kodu, ciężko jest wróżyć z fusów. Trochę dziwne, że masz apkę w Swingu i komunikujesz się z nią przez Postmana chyba, że coś źle rozumiem.

1
lukascode napisał(a):

Pokaż więcej kodu, ciężko jest wróżyć z fusów. Trochę dziwne, że masz apkę w Swingu i komunikujesz się z nią przez Postmana chyba, że coś źle rozumiem.

Jak kolega jest na poziomie myślenia "zapisać do zmiennej" a bierze się się złożone wielowarstwe apliakcje, to ... (a kod jest na zlecenie Mosadu i tajny)

Zupełny brak separacji problemów w samym myśleniu. Get / otwieranie okna ...

0

@ZrobieDobrze: chyba napisałem że jestem początkującym, a forum myślałam ze jest od tego żeby pomóc, a nie głupio komentowac. Ok rozumiem, że może nie potrafię jeszcze składnie opisać problemu czy też wrzucam za mało kodu, wystarczy komentarz i to poprawiam. A głupie uwagi chyba są trochę nie na miejscu. W takim razie gdzie osoby, które się uczą mają zadawać pytania? Skoro tu jak coś "nieprofesjonalne" zapytają będą glupio wysmiane ? Chyba nie taka rola tego forum.

0
kropla512 napisał(a):

@ZrobieDobrze: chyba napisałem że jestem początkującym, a forum myślałam ze jest od tego żeby pomóc, a nie głupio komentowac.

To ty zrób mądrze, i podaj dający się analizować kod, bo na razie to poematy słowno muzyczne

Spring ZDECYDOWANIE na tym etapie nie. Tylko zrobi ci krzywdę.

Nie wiem, czy ktokolwiek rozumie związki miedzy koncepicjami jaki wyłuszczasz, ale wbudowany serwer HTTP to mi się gryzie ze Springiem

1

Nie do końca rozumiem, ale centralny mózg ludzkości ogarnia, że może chodzić o coś takiego:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;

@SpringBootApplication
@RestController
public class SpringBootSwingApp {

    private static DefaultTableModel tableModel;
    private static final Object[] columnNames = {"Number"};
    
    public static void main(String[] args) {
        SpringApplication.run(SpringBootSwingApp.class, args);
        createAndShowGui();
    }

    private static void createAndShowGui() {
        JFrame frame = new JFrame("Numbers Table");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);
        
        tableModel = new DefaultTableModel(columnNames, 0);
        JTable table = new JTable(tableModel);
        JScrollPane scrollPane = new JScrollPane(table);
        frame.add(scrollPane, BorderLayout.CENTER);
        
        frame.setVisible(true);
    }

    @PostMapping("/app1/rest")
    public String receiveNumber(@RequestParam("number") int number) {
        SwingUtilities.invokeLater(() -> tableModel.addRow(new Object[]{number}));
        return "Received number: " + number;
    }
}

Please note that mixing Spring Boot and Swing within the same application is generally not recommended, as they have different goals and execution models. However, this example demonstrates a simple way to achieve the requested functionality.

0

@jarekr000000:
No tak, ale jak w Twoim przykładzie GET otwierać ma okno ?

(co do detali w opcji emedded bym użył jakiś lekki HTTP np RatPack, a nie kobyły która aspektuje pół świata i okolice, i JAR ma stosowną wielkość)

1 użytkowników online, w tym zalogowanych: 0, gości: 1