C'est ce que je pense faire sur un serveur JEE Glassfish en utilisant Jersey.
@GET
@Path("/{name}/{date}")
public String getMessages(@PathParam("name") String name, @PathParam("date") Date date)
J'aime l'idée de pouvoir dire aux gens qui consomment ce service Web RESTful que "La date ici est tout ce qui fonctionne avec la classe Date en Java". C'est assez simple du point de vue qu'ils peuvent simplement regarder la spécification Date, et ils auront déjà un modèle de travail avec lequel ils pourront tester.
Le problème qui m'inquiète est que lorsque je fais cela, JAX-RS n'est pas très agréable lorsque Date () n'aime pas ce qu'il obtient dans le constructeur. Puisque Date () renvoie une erreur s'il ne peut pas analyser ce qui lui est donné (comme si vous lui passez la chaîne "aujourd'hui" au lieu d'une date réelle), le serveur JEE renvoie une erreur 404.
Est-ce une bonne pratique? Y a-t-il une meilleure façon de faire cela à laquelle je ne pense pas?
la source
DateTimeFormatter
. Pour Java <= 7, j'utiliserais unThreadLocal
Qui utilisera votre service? Prendront-ils la peine de rechercher les spécifications de la
Date
classe et de déterminer le type de chaînes qu'elle analysera? Je ne le ferais pas, même si j'étais programmeur Java, je saurais où chercher ;-)Je pense que vous devez d'abord dire à vos utilisateurs à quoi ressembleront vos URI, par exemple
puis cherchez un moyen pour que Jersey vous aide à analyser le format de date que vous avez choisi. Cela pourrait signifier utiliser un
Date
type de paramètre et peut-être spécifier une expression régulière dans votre@Path
annotation, commeou en utilisant une autre classe capable d'analyser une date dans votre format. Comment gérer les URI qui ne correspondent pas aux spécifications que vous donnez à vos utilisateurs est une autre chose que vous devez décider comment gérer indépendamment de tout ce qui précède (renvoyer une ressource par défaut? Renvoyer une erreur 404?).
la source