Jak přenášet data mezi Springem-JS

Pettonius

Jak přenášet data mezi Springem-JS
« kdy: 10. 10. 2018, 14:34:42 »
Ahoj,
chtěl bych se optat, jaké je nelepší možné řešení.
Chci si napsat back-end ve springu, front - javascript/html5/css3. Problém ovšem je, že nevím, jakým způsobem mohu přenášet data. Tuším, že by se to mohlo dělat přes jsona.

Uvedu příklad: Budu mít v @Controlleru, že chci odeslat model, což bude nějaký objekt. V JSP se do <form> píše "model" a pak se s ním dalo dále pracovat. Jak mohu ten model získat na straně javasriptu? Musím si udělat nějaký speciální file? (.json)
A stejný příklad akorát opačně - budu chtít uložit nějaká data, která se vypočtou na straně javascriptu, ale uložit je budu chtít na straně springu. Jak mohu z javascriptu poslat ta data do springu?

Mockrát díky!


jehovista

Re:Jak přenášet data mezi Springem-JS
« Odpověď #1 kdy: 10. 10. 2018, 14:44:24 »
Jednoduse pouzij @RestController
https://spring.io/guides/tutorials/rest/

Natix

Re:Jak přenášet data mezi Springem-JS
« Odpověď #2 kdy: 10. 10. 2018, 16:30:32 »
Tady je pak trochu zjednodušený tutoriál. Backend:
https://spring.io/guides/gs/rest-service/

A frontend:
https://spring.io/guides/gs/consuming-rest-jquery/

Pettonius

Re:Jak přenášet data mezi Springem-JS
« Odpověď #3 kdy: 11. 10. 2018, 13:39:57 »
Děkuji. A jakým způsobem, pokud budu chtít odeslat z JS a přijmout ve springu? Čili opačně?

agent

Re:Jak přenášet data mezi Springem-JS
« Odpověď #4 kdy: 11. 10. 2018, 15:04:54 »
Úplně stejně, jen součástí prvotního dotaz z frontendu budou ta odesílaná data (v post volání) a nazpátek půjde jen odpověď, třeba že byla úspěšně uložena do DB.
Já v kódu (použitý jQuery post) mám obvykle něco takovéhle (output je JS objekt obsahující odesílaná data, data je serializovaný objekt obsahující odpověď - pokud je odpověď jednoduchá, stačil by i přímo holý string místo JSON serializovaného objektu):
Kód: [Vybrat]
    output = "data=" + JSON.stringify(output);
    $.post("http://server_url", output, function (data, status) {
        if (status == "success") {
           dataFromServer = JSON.parse(data);
           ...zpracování odpovědi...
        } else {
            alert(scriptErrmsgDbconnect);
        }
    })
Do URL si samozřejmě můžeš přidat nějaké GET parametry, které to v handleru na serveru nasměrují na správnou funkci pro zpracovaání POST dat.


Natix

Re:Jak přenášet data mezi Springem-JS
« Odpověď #5 kdy: 11. 10. 2018, 15:57:09 »
A na straně Springu pak request body obsahující JSON přijmeš a deserializuješ pomocí anotace @RequestBody na parametru metody, viz. kód v https://spring.io/guides/tutorials/rest/

Kód: [Vybrat]
@PostMapping("/employees")
Employee newEmployee(@RequestBody Employee newEmployee) {
return repository.save(newEmployee);
}

A pokud post body bude obsahovat {"name": "Samwise Gamgee", "role": "gardener"}, tak ho Spring automaticky deserializuje na odpovídající datovou třídu.

Lopata

Re:Jak přenášet data mezi Springem-JS
« Odpověď #6 kdy: 12. 10. 2018, 12:46:22 »
Lopatou !

12345

Re:Jak přenášet data mezi Springem-JS
« Odpověď #7 kdy: 12. 10. 2018, 13:14:54 »
Citace
Já v kódu (použitý jQuery post) mám obvykle něco takovéhle

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

Není třeba kvůli tomu importovat 85KB knihovnu.

agent

Re:Jak přenášet data mezi Springem-JS
« Odpověď #8 kdy: 12. 10. 2018, 16:40:08 »
Pokud máš na mysli jQuery - dlouho jsem psal drobné JS kódy bez ní, používal standardní XMLHttpRequest, ale pár let zpátky jsem zkusil, oblíbil a už jí používám ve všech projektech. A když už jí tam mám, tak proč nevyužívat vše co umí.
Ono to není jen o ajaxu, ale i o práci s DOM, odclonění od nekompatibility browserů...
Frameworky, co mi vnucují nějaké povinné schéma jak něco dělat, rád nemám, ale knihovny rozšiřující možnosti JS a šetřící čas a práci použiju rád.

Rott

Re:Jak přenášet data mezi Springem-JS
« Odpověď #9 kdy: 12. 10. 2018, 16:55:10 »
JQuery je celkově na ústupu. X let zpátky to byla bomba, to je pravda. Dneska už ale spíš postrádá význam. Zkus použít jQuery třeba v Reactím projektu a počkej, co dostaneš za odezvu od kolegů ;-) Kde to jen jde, tam radši používej standardní API, které by měl znát každý. Knihovnu XY bude znát zlomek lidí. jQuery je v tomhle ohledu trochu výjimka, ale tady je zase špatně ten aspekt, že spousta lidí umí perfektně jQuery, ale ze standardních funkcí pro práci s DOMem vědí velký kulový - netuší, proč to vlastně funguje.