domingo, 8 de octubre de 2017

Creando un webservice RESTFUL con Jersey - Parte 2

Vamos a crear un bean para generar mensajes..
package com.jersey.model;

public class Message {
public long id;
public String name;
public String address;

public long getId() {
return id;
   }
   public String getName() {
   return name;
   }
 
   public String getAddress(){
   return address;
   }
 
 
   public void setId(long p) {
   id=p;
   }
   public void setName(String p) {
   name=p;
   }
 
   public void setAddress(String p){
   address=p;
   }
}


Vamos a generar un bean de servicio.

package com.jersey.services;

import java.util.ArrayList;
import java.util.List;

import com.jersey.model.Message;

public class MessageServices {
List<Message> arr = new ArrayList<Message>();

public MessageServices(List<Message> m) {
arr = m;
}

public MessageServices() {
arr = new ArrayList<Message>();
}

public List<Message> getAllMessages() {
return arr;
}

public void addRecord(Message m) {
arr.add(m);
}

 public void generateAllMessages() { if (arr.isEmpty()) { Message msg = new Message(); msg.setId(1); msg.setName("Luis"); msg.setAddress("Aqui mero"); arr.add(msg); msg = new Message(); msg.setId(2); msg.setName("Luis M"); msg.setAddress("Aqui alla"); arr.add(msg); } }

public Message getMessage(long id) {
for (Message item : arr) {
if (item.getId() == id) {
return item;
}
}

return new Message();
}
}


Vamos a generar la clase para el servicio web:

package com.jersey.webservices;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.jersey.model.Message;
import com.jersey.services.MessageServiceSingleton;
import com.jersey.services.MessageServices;

@Path("message")
public class WebServiceMessage {

MessageServices service = MessageServiceSingleton.getInstance();

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Message> getMessage() {

service.generateAllMessages();

return service.getAllMessages();

}

}

Crea la clase singleton MessageServiceSingleton para obtener una instancia de MessageService:
package com.jersey.services;

public class MessageServiceSingleton {
private static MessageServices instance = null;

public static MessageServices getInstance() {
      if(instance == null) {
         instance = new MessageServices();
      }
      return instance;
   }



}


Correr la aplicacion en tomcat y probar desde postman con la siguiente url:
http://localhost:8080/Jersey/webapi/message

El resultado obtenido sera lo siguiente:

[
    {
        "address": "Aqui alla",
        "id": 2,
        "name": "Luis M"
    },
    {
        "address": "Aqui alla",
        "id": 2,
        "name": "Luis M"
    }
]

Ahora vamos a crear un metodo para obtener un solo mensaje la clase WebServiceMessage 


@GET
@Path("/{messageId}/")
@Produces(MediaType.APPLICATION_JSON)
public Message getMessage(@PathParam("messageId") Long id) {
return service.getMessage(id);

}

Probamos la siguiente URL en postman, se obtendra el siguiente resultado.
http://localhost:8080/Jersey/webapi/message/1/

{
    "address": "Aqui mero",
    "id": 1,
    "name": "Luis"

}

Ahora vamos a crear un html para probar el webservice desde angular:

<!doctype html>
<html ng-app="demo">
<head>
<title>Hello AngularJS</title>
<script
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
<script>
angular.module('demo', []).controller(
'Hello',
function($scope, $http) {
$http.get('http://localhost:8080/Jersey/webapi/message/2')
.then(function(response) {
$scope.greeting = response.data;
});
});
</script>
</head>

<body>
<div ng-controller="Hello">
<p>El ID es : {{greeting.id}}</p>
<p>El nombre es: {{greeting.name}}</p>
<p>La direccion es: {{greeting.address}}</p>


</div>
</body>

</html>


Para leer todos los registros y desplegarlos con angular:

<!doctype html>
<html ng-app="demo">
<head>
<title>Hello AngularJS</title>
<script
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
<script>
angular.module('demo', []).controller(
'Hello',
function($scope, $http) {
$http.get('http://localhost:8080/Jersey/webapi/message').then(
function(response) {
$scope.greeting = response.data;
});
});
</script>
</head>

<body>
<div ng-controller="Hello">


<table>
<tr ng-repeat="x in greeting">
<td>{{ x.id }}</td>
<td>{{ x.name }}</td>
<td>{{ x.address }}</td>
</tr>
</table>


</div>
</body>
</html>



No hay comentarios:

Publicar un comentario