É isso que estou pensando em fazer em um servidor JEE Glassfish usando Jersey.
@GET
@Path("/{name}/{date}")
public String getMessages(@PathParam("name") String name, @PathParam("date") Date date)
Eu gosto da idéia de poder dizer às pessoas que consomem esse serviço web RESTful que "A data aqui é qualquer coisa que funcione com a classe Date em Java". Isso é bastante simples do ponto de vista de que eles podem apenas olhar para a especificação Date e já terão um modelo de trabalho com o qual podem testar.
O problema que me preocupa é que, quando faço isso, o JAX-RS não é muito bom quando Date () não gosta do que recebe no construtor. Como Date () gera um erro se não puder analisar o que foi fornecido (como se você passar a string "today" em vez de uma data real), o servidor JEE retornará um erro 404.
Esta é uma boa prática? Existe uma maneira melhor de fazer isso em que não estou pensando?
fonte
DateTimeFormatter
. Para Java <= 7, eu usaria umThreadLocal
Quem usará seu serviço? Será que eles se preocupam em procurar as especificações da
Date
classe e descobrir que tipo de strings serão analisadas? Eu não, mesmo sendo um programador Java, eu saberia onde procurar ;-)Acho que você deve primeiro informar aos usuários como serão os seus URIs, por exemplo
e, em seguida, procure uma maneira de fazer com que Jersey o ajude a analisar o formato de data escolhido. Isso pode significar usar um
Date
tipo de parâmetro e talvez especificar uma expressão regular em sua@Path
anotação, comoou usando alguma outra classe capaz de analisar uma data em seu formato. Como lidar com URIs que não correspondem às especificações fornecidas aos seus usuários é outra coisa que você deve decidir como lidar independentemente de qualquer uma das opções acima (retornar um recurso padrão? Retornar um erro 404?).
fonte