#7 Mini tutorial:
JERSEY es una implementación de javax, para usarlo en tu proyecto puedes añadir lo siguiente a tu pom:
<dependencies>
<!-- JERSEY -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
GET:
spoiler public String getAccountList(String token) {
//Jersey Client
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(DUMMY_BANK_URL); //URL donde hacer las peticiones
//Parametros en la URL
MultivaluedMap<String, String> formData = new MultivaluedMapImpl();
formData.add("token", token);
/*Path: es el servicio al que queremos hacer la petición
accept: lo que esperamos que llegue, puedes poner tantos como quieras
get: donde guardar la respuesta, el ClientResponse viene con Jersey
*/
ClientResponse response = service.path("accounts").queryParams(formData).accept(MediaType.APPLICATION_JSON).
accept(MediaType.APPLICATION_FORM_URLENCODED).get(ClientResponse.class);
//el getEntity es un stream y al ponerle String intenta convertilo a esto, en nuestro caso es un JSON
String responseString = response.getEntity(String.class);
System.out.println("RESPONSE:" + responseString);
return responseString;
}
POST:
spoilerpublic String createNewBankCard(String token, String associatedAccount, int age, double creditLimit,
String payForm, String name, String firstSurname, String secondSurname, String documentType,
String documentNumber, int postalCode, String address, String city) {
//Lo mismo que el get
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(DUMMY_BANK_URL);
MultivaluedMap<String, String> formData = new MultivaluedMapImpl();
formData.add("token", token);
formData.add("associatedAccount", associatedAccount);
formData.add("age", String.valueOf(age));
formData.add("creditLimit", String.valueOf(creditLimit));
formData.add("payForm", payForm);
formData.add("name", name);
formData.add("firstSurname", firstSurname);
formData.add("secondSurname", secondSurname);
formData.add("documentType", documentType);
formData.add("documentNumber", documentNumber);
formData.add("postalCode", String.valueOf(postalCode));
formData.add("address", address);
formData.add("city", city);
//Solo cambia aqui, en lugar de get pues un POST metiendo la respuesta en ClientResponse
ClientResponse response = service.path("createbankcard").accept(MediaType.APPLICATION_JSON).
accept(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class, formData);
String responseString = response.getEntity(String.class);
System.out.println("RESPONSE:" + responseString);
return responseString;
}
WEBSERVICE:
GET
@GET
@Path("/accounts") //Path a partir de tu webresource donde estara el servicio
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) //Lo que espera recibir esto es una url estandar con parametros
@Produces(MediaType.APPLICATION_JSON) //Lo que devuelve
public Object getAccounts(@QueryParam("token") String token) {
return AuxDummyServices.getAccounts(token);
}
POST
@POST
@Path("/createtransfer")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Object createNewTransfer(@FormParam("token") String token, @FormParam("bankAccountOrigin") String bankAccountOrigin,
@FormParam("bankAccountDestiny") String bankAccountDestiny, @FormParam("transferImport") Double transferImport) {
return AuxDummyServices.createNewTransfer(token, bankAccountOrigin, bankAccountDestiny, transferImport);
}
Y ahora un ejemplo de una clase:
@XmlRootElement
public class EBankingResponseOKBankCardServices extends EBankingResponseOK {
ArrayList<BankCardService> bankCardServicesList;
public EBankingResponseOKBankCardServices() {
super();
this.bankCardServicesList = new ArrayList<BankCardService>();
}
public EBankingResponseOKBankCardServices(ArrayList<BankCardService> bankCardServicesList) {
super();
this.bankCardServicesList = bankCardServicesList;
}
public ArrayList<BankCardService> getBankCardServicesList() {
return bankCardServicesList;
}
public void setBankCardServicesList(ArrayList<BankCardService> bankCardServicesList) {
this.bankCardServicesList = bankCardServicesList;
}
}
Con ponerle el XMLRootElement, todos los atributos salvo los marcados con un @Transient seran devueltos en el JSON o XML (dependiendo del produce del webservice), estas clases siempre tienen que tener un constructor default explicitamente declarado y los set / get de los atributos.
Si tienes alguna duda pregunta x aqui o pm.
Un saludo!