RESTful Webservice con wicket [SC]ful webservice con wicket [sc]
1. WICKET RESTFUL CON WICKET
--------------------------------------------------------------------------------
----------------------------------------------
DESCRIZIONE
E' possibile scrivere webservice di tipo RESTful direttamente in wicket
utilizzando la libreria
"Wicket-rest-annotations".
Si tratta pertanto di una libreria che implementa la specifica JAX-RS. Il
protocollo di comunicazione
è json (http://json.org/json-it.html)
--------------------------------------------------------------------------------
----------------------------------------------
LIBRERIE
- wicketstuff-restannotations-6.0.jar
- wicketstuff-restannotations-json-6.0
E' possibile scarivarle dal sito ufficiale https://github.com/bitstorm/Wicket-
rest-annotations oppure
da http://mvnrepository.com/
Dipendenze:
- gson-2.2.4.jar
Libreria json per java che è possibile scaricare da json.org o da
http://mvnrepository.com/
--------------------------------------------------------------------------------
----------------------------------------------
ESEMPIO
Supponiamo di volere fornire il servizio di scambio pojo Persona tramite
RESTful-json.
Per semplificare l'esempio la classe presenta un numero minimo di proprietà. Ma
è possibile
utilizzare il numero di proprietà desiderate. E' anche possibile utilizzara
proprietà che
fanno riferimento ad altri oggetti o liste. Sarà la libreria che in maniera
trasperente convertirà
gli oggetti in rappresentazione json.
Ovviamente si presuppone che sia già presente un progetto wicket.
Si fa inoltre osservare che non è necessario marcare il pojo con delle
annotazioni.
STEP 01: creare il bean:
package myrest;
public class Persona {
private String nome;
private String cognome;
private int eta;
public Persona(String nome, String cognome, int eta) {
this.nome = nome;
this.cognome = cognome;
this.eta = eta;
}
...
metodi get e set
2. }
STEP 02: creare la classe per fornire la risorsa:
Questa pagina fornisce tre serivizi:
1) Restituisce tutte le anagrafiche (metodo GET)
2) Elimina un'anagrafica (metodo DELETE)
3) Inserisce un'anagrafica (metodo POST)
Si fa osservare che è sufficiente estendere la classe GsonRestResource
(IResource).
package myrest;
import java.util.ArrayList;
import java.util.List;
import org.wicketstuff.rest.annotations.MethodMapping;
import org.wicketstuff.rest.annotations.parameters.RequestBody;
import org.wicketstuff.rest.resource.gson.GsonRestResource;
import org.wicketstuff.rest.utils.http.HttpMethod;
/**
*
* @author osanet
*/
public class PersonsRestResource extends GsonRestResource {
private List<Persona> persone;
public PersonsRestResource() {
persone = new ArrayList<Persona>();
persone.add(new Persona("pippo01", "rossi01", 10));
persone.add(new Persona("pippo02", "rossi02", 20));
persone.add(new Persona("pippo03", "rossi03", 30));
}
@MethodMapping("/persone")
public List<Persona> getAllPersons() {
return persone;
}
@MethodMapping(value = "/persone/{personIndex}", httpMethod =
HttpMethod.DELETE)
public void deletePerson(int personIndex) {
persone.remove(personIndex);
}
@MethodMapping(value = "/persone", httpMethod = HttpMethod.POST)
public Persona createPerson(@RequestBody Persona persona) {
persone.add(persona);
return persona;
}
}
STEP 03: Registrazione del servizio nell'applicazione
Questa operazione registra il servizio e gli assegna /managerpersone nel path
dell'applicazione
Nel metodo Application.int() aggiungere:
3. mountResource("/managerpersone", new ResourceReference("restReference") {
PersonsRestResource resource = new PersonsRestResource();
@Override
public IResource getResource() {
return resource;
}
});
STEP 04;
Compilata l'applicazione, supposto che ad esempio myapp01 sia lo scope
dell'applicazione e che /app sia il path assegnato
alla servlet wicket, allora per accedere al servizio rest:
http://localhost:8080/myapp01/app/managerpersone/persone
questo farà una richiedsta di tipo GET a cui corrisponde il metodo
getAllPersons(). Pertanto la procedura risponderà
restituendo l'elenco delle persone (in formato json).
E' anche possibile testare gli altri metodo con un client restful.
--------------------------------------------------------------------------------
----------------------------------------------