Właśnie o tym myślę na serwerze JEE Glassfish przy użyciu Jersey.
@GET
@Path("/{name}/{date}")
public String getMessages(@PathParam("name") String name, @PathParam("date") Date date)
Podoba mi się pomysł, aby móc powiedzieć ludziom korzystającym z usługi RESTful, że „Data tutaj jest wszystkim, co działa z klasą Date w Javie”. Jest to dość proste z punktu widzenia, że mogą po prostu spojrzeć na specyfikację daty i będą już mieć działający model, z którym będą mogli testować.
Problemem, o który się martwię, jest to, że kiedy to robię, JAX-RS nie jest zbyt miły, gdy Date () nie lubi tego, co dostaje w konstruktorze. Ponieważ Date () generuje błąd, jeśli nie może przeanalizować tego, co zostało podane (np. Jeśli przekażesz ciąg „dzisiaj” zamiast prawdziwej daty), serwer JEE zwraca błąd 404.
Czy to dobra praktyka? Czy istnieje lepszy sposób, aby to zrobić, o czym nie myślę?
źródło
DateTimeFormatter
. Dla Javy <= 7ThreadLocal
Kto skorzysta z twojej usługi? Czy będą starali się sprawdzić specyfikację
Date
sprawdzić klasy i dowiedzieć się, jakie ciągi będzie analizować? Nie zrobiłbym tego, nawet gdybym był programistą Java, wiedziałbym, gdzie szukać ;-)Myślę, że powinieneś najpierw powiedzieć swoim użytkownikom, jak będą wyglądać Twoje identyfikatory URI, np
a następnie poszukaj sposobu, aby Jersey pomógł ci w analizie wybranego formatu daty. Może to oznaczać użycie
Date
typu parametru i być może określenie wyrażenia regularnego w@Path
adnotacji, nplub używając innej klasy zdolnej do parsowania daty w twoim formacie. Jak obsługiwać identyfikatory URI, które nie pasują do specyfikacji, którą podajesz użytkownikom, to kolejna rzecz, którą powinieneś zdecydować, jak obsługiwać niezależnie od któregokolwiek z powyższych (zwróć domyślny zasób? Zwróć błąd 404?).
źródło