Skini Spring Tool Suite

 
Prvo odredi koju verziju Windowsa koristiš, 32bitnu ili 64bitnu. Ako ne znaš, na ovom linku ćeš saznati kako.
 
Odi na sljedeći link i skini Spring Tool Suite. Odaberi Windows verziju (Based on Eclipse 4.5.2), i za kraj odaberi 32/64 bitnu verziju, ovisno o svojim windozama.
 
Skini i otpakiraj na neku poznatu lokaciju, npr. C:\Program Files direktorij.
 

Kreiraj prvu aplikaciju

 
Ako si otpakirao u Program Files, otvori sljedeći direktorij: c:\Program Files\sts-bundle\sts-3.7.3.RELEASE\ i pokreni STS.exe.
 
Kada se aplikacija otvori, u gornjem lijevom kutu klikni na File -> New -> Other. Otvoriti će se novi prozor, upiši Spring Starter Project ili ga potraži u Spring skupini. Odaberi Spring Starter Project i klikni Next button.
 
Na sljedećem ekranu daj projektu ime, u tvom slučaju to će biti com.dohvat.podataka. U Group i Package upiši nešto kao com.dohvat.klijenta, u Artifact također upiši DohvatKlijenta, a u Description kratki opis projekta na kojemu radiš, par riječi.
 
Klikni opet Next button.
 
Na sljedećoj stranici ćeš vidjeti 20-30 okomitih tabova s pdređenim tekstovima. Pošto radimo REST aplikaciju, trebamo uključiti Web kao dependency (našem projektu dodajem o plugin koji mo omogučava hendlanje REST poziva). Uglavnom, zadnji tab se zove Web, klikni na njega i kada se prikaže sadržaj opet klikni na Web check box.
 
Klikni opet Next button i na Finish Button. Spring Tool Suite će krenuti skidati sve potrebne datoteke, zato sačekaj da završi.
 
Kada download završi, u gornjem lijevom kutu će se pojaviti novi projekt, izgledati će ovako:
 
 

Otvaranje aplikacije

 
Klikni na taj projekt (strelicu lijevo od njega), e sada klikči tako po src/main/java, onda package ime projekta (kod mene je com.example), sve dok ne dođeš do java file-a, kod mene se zove DohvatPodatakaApplication.java (prijekt sam nazvao DohvatPodataka). Lijevi dvoklik na njega da ga otvoriš.
 

Početne izmjene

 
Kada se otvori početna aplikacija moramo napraviti neke izmjene, nažalost ne znam zašto no idemo pratiti što sam pročitao.
 
Pronađi text:
 
@SpringBootApplication
 
I zamijeni ga sa:
 
@Configuration
@EnableAutoConfiguration
@ComponentScan
 
Kada dodaš linije, kraj svale će se pojaviti crveni križić koji označava grešku. Uglavnom, da bi ovaj text (sve što počinje sa @ se zove anotacija) radio moramo projektu dodati vezane Java pakete koji sadrže te implamentacije. Klikni na crveni križić i pojaviti će ti se opcije kako to ispraviti. Prva opcija uviojek počinje sa Import ….. Tako se importaju potrebni paketi. Uglavnom, za svaku grešku na anotaciji klikni na crveni križić i odaberi Import. Ako si dobro napravio na vrku aplikacije ćeš vidjeti nove linije koje importaju potrebne pakete (linije počinju sa import).
 
E sada liniju:
@ComponentScan
 
Zamijeni sa:
@ComponentScan({"controller","service"})
 
Nemam pojma zašto, uputstva kažu da treba biti tako. Uvijek u slobodno vrijeme možeš proučiti zašto je to tako.
 

Dodavanje koda za REST web servis

 
Opet pogledaj u gornji lijevi kut, i otvori projekt dok ne vidiš /src/main/java, desni klik na /src/main/java, odaberi New -> Package, upiši ime model, tehnički može biti bilo koje ime, no neka bude model za sada. Klikni na Finish.
 
Opet pogledaj u gornji lijevi kut, ispod DohvatPodatakaApplication.java će se pojaviti paket/direktorij model. Desni klik na njega, New -> Class, daj joj ime Korisnik i klikni na Finish.
 
U ovu klasu ćemo pisati kod koji će definirati podatak koji pokušavamo hendlati. Kako ti u zadataku hendlaš korisnika, tako ću ja ovdje kreirati poadtke za neku recimo osobu.
 
Otvori navedenu klasku s brzim dvoklikom.
 
Ako si pogledao video tutorijale koje sam ti poslao, trebao bi moći čitati kod ispod:
 
package model;

public class Korisnik {
	int id;
	String firstName;
	String lastName;
	int age;
	String city;
	String address;
	String personId;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPersonId() {
		return personId;
	}
	public void setPersonId(String personId) {
		this.personId = personId;
	}
}
 
Kao što vidiš, napravio sam klasu korisnik koja ima 7 parametara id, firstName, lastName i tako dalje. Primjetim kako svaki parametar klase (varijabla) počinje s mali slovom, to je nepisano pravilo kako se imeju varijable u Javi, ista stvar vrijedi za JavaScript. Također uvijek je poželjno koristiti eng jezik za imenovanje varijabli, metoda itd. Nikada ne znaš tko će raditi na tvok kodu.
 
Također primjeti da brojčane varijable počinju sa int a tekstualne sa String. int definira da je varijabla broj, a String da je varijabla text. Postoje i drugi tipovi brojeva osim int-a, npr. float koji definira decimalne brojeve. No više o tome ćeš saznati iz New Boston tutorijala.
 
Svaki parametar klase ispod ime dvije metode, jedna da ga dohvati a druga da ga spremi. Te metode se još zovu getter i setter metode. Jer jedna radi get (dohvaća) a druga radi set (sprema).
 
Opet pogledaj u gornji lijevi kut, i otvori projekt dok ne vidiš /src/main/java, desni klik na /src/main/java, odaberi New -> Package, upiši ime service, tehnički može biti bilo koje ime, no neka bude service za sada. Klikni na Finish.
 
Opet pogledaj u gornji lijevi kut, ispod DohvatPodatakaApplication.java će se pojaviti paket/direktorij service. Desni klik na njega, New -> Class, daj joj ime KorisnikService i klikni na Finish.
 
Otvori navedenu klasku s brzim dvoklikom.
 
Upiši sljedeći kod:
 
package service;

import java.util.Hashtable;
import org.springframework.stereotype.Service;
import model.Korisnik;

@Service
public class KorisnikService {
        //Hashtable je složeni tip podataka koji može spremati key, value podatke. Npr: "1", "Dragan". 
        // Znači key je 1 a value je Dragan. Podatke unutar Hashtablea dohvaćamo po ključu (key). Tako da
        // ako podatak Dragan tražimo breko broja 1.
        // Dolje kažemo da će se za ključ koristiti String a da će value biti objekt Korisnik, koji smo kreirali u prethopdnoj klasi
	Hashtable <String, Korisnik> korisnici = new Hashtable<String, Korisnik>(); 
	
        // Ovo je konstruktor klase i pokreće se svaki put kada pozivamo klasu
	public KorisnikService() {

                // Ovdje instanciramo dva objekta Korisnik, koje smo kreirali u prijašnjoj klasi i dodjeljujemo joj neke vrijednosti
                // Kao što vidiš ovdje koristimo setter metode od klase/objekta Korisnik 
		Korisnik k1 = new Korisnik();
		k1.setId(1);
		k1.setFirstName("Mario");
		k1.setLastName("Vrankovečki");
		k1.setAge(30);
		k1.setPersonId("23423345345");
		k1.setAddress("Nigdjezemska");
		k1.setCity("Zagreb");
		
		Korisnik k2 = new Korisnik();
		k2.setId(1);
		k2.setFirstName("Dragan");
		k2.setLastName("Gaić");
		k2.setAge(35);
		k2.setPersonId("954769764567");
		k2.setAddress("Rupčaga");
		k2.setCity("Zagreb");
		
                // Ocdje u Hashtable dodajemo oba novonastala Korisnik objekta i stavljamo im ključeve 1 i 2
		korisnici.put("1", k1);
		korisnici.put("2", k2);
	}
	
        // Ovdje radimo metodu pomoću koje ćemo iz Hashtablea dohvatiti objekt pojedinačnog korisnika u ovisnosti o ključu (gore smo definirali ključeve 1 i 2)
	public Korisnik getKorisnik(String id) {
		if(korisnici.containsKey(id)) {
			return korisnici.get(id);
		} else {
			return null;
		}
	}
	
        // Ova metoda vraća cijeli Hashtable
	public Hashtable<String, Korisnik> getAll () {
		return korisnici;
	}
}
 
Opet pogledaj u gornji lijevi kut, i otvori projekt dok ne vidiš /src/main/java, desni klik na /src/main/java, odaberi New -> Package, upiši ime controller, tehnički može biti bilo koje ime, no neka bude controller za sada. Klikni na Finish.
 
Opet pogledaj u gornji lijevi kut, ispod DohvatPodatakaApplication.java će se pojaviti paket/direktorij controller. Desni klik na njega, New -> Class, daj joj ime KorisnikController i klikni na Finish.
 
Upiši sljedeći kod:
 
package controller;

import java.util.Hashtable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import service.KorisnikService;
import model.Korisnik;

// Ova klasa kontrolira naš web servis, točnije ona prima vanjske upite i hendla ih dalje prema aplikaciji
// Kada jednom pokrenemo ovu aplikaciju, lokalno ćemo je moći pokretati iz browsera s http://localhost:8080
// Da bismo mogli naciljati upravo ovaj kontroler moramo mu dati lokaciju, a to je ovaj text ispod /korisnici
// Znači da bismo pozvali ovaj kontroler koristiti ćemo link http://localhost:8080/korisnici
// No to nije sve, dolje definiramo dvije metode za ovaj korisnik, jedna vraća sve korisnike a druga pojedinačnog
// U konačnici našu aplikaciju ćemo koristiti ovako: http://localhost:8080/korisnici/svi ili http://localhost:8080/korisnici/1 ili http://localhost:8080/korisnici/2
@RestController
@RequestMapping("/korisnici")
public class KorisnikController {
	@Autowired
	KorisnikService ks;
	
        //ova metoda radi ako u URL završava s /svi i vratiti će sve korisnike
	@RequestMapping("/svi")
	public Hashtable<String, Korisnik> getAll () {
		return ks.getAll();
	}
	
        // ova metoda radi ako URL azvršava s brojem /1 ili /2 i vratiti će pojedinačne korisnike
        // Zašto 1 ili 2? Zato što smo u kodu dodali samo dva korisnika, tako da imamo samo ključeve 1 i 2
	@RequestMapping("{id}")
	public Korisnik getKorisnik(@PathVariable("id") String id) {
		return ks.getKorisnik(id);
	} 
}
 
Sada opet pogledaj u lijevi gornji kut, desni klik na cijelu aplikaciju, klikni na Run As -> Spring Boot App. Ovo će pokrenuti aplikaciju. Tijekom pokretanja, u donjem prozoru same aplikacije će se prikazati log pokretanja. Ako nema grešaka, a ne bi trebalo biti ako si dobro upotrebio ovaj kod, možemo pogledati aplikaciju.
 
Otvori browser (Chrome ili Firefox, odreći ću te se ako koristiš Internet Explorer) i upiši jedan od gore navedenih linkova:
 
http://localhost:8080/korisnici/svi
http://localhost:8080/korisnici/1
http://localhost:8080/korisnici/2