JAX-RS Parametros Date
JAX-RS es fundamental para la creación de servicios REST dentro del ecosistema Java. tiene notables mejorias con cada versión.
Contamos con varios mecanimos para pasar parametros mediante simples anotaciones. En algunos casos deseamos realizar consultas por fechas por ejemplo para filtras los documentos de una colección en MongoDB mediante un campo fecha.
Hacemos una consulta desde consola a la colección fruit
Creamos el entity
public class Fruit {
private String name;
private String description;
private String id;
private Date date1;
public Fruit() {
}
//set/get
}
Acontinuación creamos el Resources observe que el parametro fecha es de tipo String, y MongoDB almacena el contenido de las fechas en formato ISODATE
Mediante la clase DateUtil.stringToISODate --> Convertimos la fecha en formato String a ISODate que maneja MongoDB.
Creamos el Resources
@GET
@Path("/filterbyqueryparamdate")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Fruit> filterbyqueryparamdate(@QueryParam("name") String name, @QueryParam("id") String id, @QueryParam("date1") String date1) {
List<Fruit> fruitList = new ArrayList<>();
try {
Date dateConverter = DateUtil.stringToISODate(date1);//dateString is query param.
fruitList = fruitRepository.findByDate(dateConverter);
} catch (Exception e) {
System.out.println("filterbyqueryparam() " + e.getLocalizedMessage());
}
return fruitList;
}
En el cliente creamos un Services
public List<Fruit> filterbyqueryparamdate(String name, String id, String date1) {
List<Fruit> suggestions = new ArrayList<>();
try {
Client client = ClientBuilder.newClient();
suggestions = client
.target("http://localhost:8080"+ "/jmoordbcoreweb/resources/fruit/filterbyqueryparamdate/")
.queryParam("name",name )
.queryParam("id", id)
.queryParam("date1", date1)
.request(MediaType.APPLICATION_JSON)
.get(new GenericType<List<Fruit>>() {});
} catch (Exception e) {
JsfUtil.errorDialog(" filterbyqueryparam()", e.getLocalizedMessage());
}
return suggestions;
}
En el Controller del Cliente usamos un proceso inverso convertimos una fecha a String mediante DateUtil.isoDateToString(): y lo pasamos como parametro,
String date1 = DateUtil.isoDateToString(date);
List<Fruit> list = fruitServices.filterbyqueryparamdate("orange", "2", date1);
Comments