Esto es lo que estoy pensando hacer en un servidor JEE Glassfish usando Jersey.
@GET
@Path("/{name}/{date}")
public String getMessages(@PathParam("name") String name, @PathParam("date") Date date)
Me gusta la idea de poder decirle a las personas que consumen este servicio web RESTful que "La fecha aquí es cualquier cosa que funcione con la clase Date en Java". Eso es bastante simple desde el punto de vista de que solo pueden mirar la especificación de Fecha, y ya tendrán un modelo de trabajo con el que pueden probar.
El problema que me preocupa es que cuando hago esto, JAX-RS no es muy agradable cuando a Date () no le gusta lo que obtiene en el constructor. Dado que Date () arroja un error si no puede analizar lo que se proporciona (como si le pasa la cadena "hoy" en lugar de una fecha real), el servidor JEE devuelve un error 404.
¿Es esta una buena practica? ¿Hay una mejor manera de hacer esto que no estoy pensando?
fuente
DateTimeFormatter
. Para Java <= 7, usaría unThreadLocal
¿Quién usará su servicio? ¿Se molestarán en buscar la especificación de la
Date
clase y averiguar qué tipo de cadenas analizará? No lo haría, incluso si fuera un programador de Java sabría dónde buscar ;-)Creo que primero debe decirles a sus usuarios cómo se verán sus URI, p. Ej.
y luego busque la manera de que Jersey lo ayude a analizar el formato de fecha que elija. Eso podría significar usar un
Date
tipo de parámetro y tal vez especificar una expresión regular en su@Path
anotación, comoo usando alguna otra clase capaz de analizar una fecha en su formato. Cómo manejar los URI que no coinciden con las especificaciones que le da a sus usuarios es otra cosa que debe decidir cómo manejar independientemente de cualquiera de los anteriores (¿devolver un recurso predeterminado? ¿Devolver un error 404?).
fuente