Dies ist, was ich überlege, auf einem JEE Glassfish-Server mit Jersey zu tun.
@GET
@Path("/{name}/{date}")
public String getMessages(@PathParam("name") String name, @PathParam("date") Date date)
Ich mag die Idee, Leuten, die diesen RESTful-Webservice nutzen, mitteilen zu können, dass "das Datum hier alles ist, was mit der Date-Klasse in Java funktioniert". Das ist vom Standpunkt aus ziemlich einfach: Sie können sich nur die Datumsspezifikation ansehen und haben bereits ein funktionierendes Modell, mit dem sie testen können.
Das Problem, über das ich mir Sorgen mache, ist, dass JAX-RS dabei nicht sehr schön ist, wenn Date () nicht mag, was es im Konstruktor bekommt. Da Date () einen Fehler auslöst, wenn es nicht analysieren kann, was es gegeben hat (z. B. wenn Sie die Zeichenfolge "heute" anstelle eines echten Datums übergeben), gibt der JEE-Server einen 404-Fehler zurück.
Ist das eine gute Praxis? Gibt es einen besseren Weg, dies zu tun, an den ich nicht denke?
quelle
DateTimeFormatter
. Für Java <= 7 würde ich einThreadLocal
Wer wird Ihren Service nutzen? Werden sie sich die Mühe machen, die Spezifikation der
Date
Klasse nachzuschlagen und herauszufinden, welche Art von Zeichenfolgen analysiert werden? Ich würde nicht, selbst wenn ich ein Java-Programmierer wäre, würde ich wissen, wo ich suchen muss ;-)Ich denke, Sie sollten Ihren Benutzern zuerst mitteilen, wie Ihre URIs aussehen werden, z
und suchen Sie dann nach einer Möglichkeit, wie Jersey Ihnen beim Parsen des von Ihnen gewählten Datumsformats hilft. Dies kann bedeuten, dass Sie einen
Date
Parametertyp verwenden und möglicherweise einen regulären Ausdruck in Ihrer@Path
Anmerkung angeben, zoder verwenden Sie eine andere Klasse, die ein Datum in Ihrem Format analysieren kann. Der Umgang mit URIs, die nicht mit der Spezifikation übereinstimmen, die Sie Ihren Benutzern geben, ist eine weitere Sache, die Sie unabhängig von einem der oben genannten Punkte behandeln sollten (Rückgabe einer Standardressource? Rückgabe eines 404-Fehlers?).
quelle