web-dev-qa-db-fra.com

Consommez la méthode Restful à partir d'une URL avec Date Param Java

J'ai une méthode de service Web reposante comme celle-ci: 

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") Date date) {
    // ...business code...
    return "hello world";
}

Comment puis-je invoquer cette méthode à partir d'un WebBrowser?, Le problème est le paramètre Date qui, lorsque j'essaie, me donne 404 introuvable ou une erreur de serveur interne 500.

13
Sergio

Je suggérerais d’accepter la date en tant que String et de l’analyser vous-même. Ainsi:

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") String date) {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date dateObj = sdf.parse(date);

    return "hello world";
}

Le moyen de faire cette demande via un navigateur est:

http://localhost/your_service/generateInfo?date=2013-02-14

Points à considérer lors de l'analyse des dates:

  • SimpleDateFormat est très flexible avec l'analyse de différents formats de date. La norme ISO pour la date chaînes est la suivante: yyyy-MM-dd

  • La Joda Java date API est acceptée comme une implémentation plus complète de la date/heure et certains pensent qu'elle est plus optimisée que l'API de date native de Java , en particulier pour l'analyse des dates.

  • il est souvent préférable d'indiquer les dates sous forme d'horodatage Epoch, en particulier si votre application fonctionne sur des fuseaux horaires différents. Cependant, vous devez être conscient des problèmes de mise en cache HTTP lors de l'acceptation des horodatages Epoch (par exemple, si vos clients ne tronquent pas les horodatages Epoch, vous obtiendrez de nombreuses erreurs de cache). Je ferais référence à ISO-8601 , car les dates formatées sont plus faciles à mettre en cache HTTP.

14
pestrella

Cela dépend du format de la date dans l'URL. Selon cette question , tout format que le constructeur Date(String) peut gérer devrait fonctionner. Si votre format de date est différent et que vous ne pouvez pas le changer, vous devrez utiliser la solution de pestrella, recevoir la date sous forme de chaîne et la convertir vous-même.

0
Ridcully
@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)

public String generateInfo(
 @QueryParam("a") String a,   
 @QueryParam("b") String b, 
 @QueryParam("date") String str_date) {

 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

 Date date = df.parse(str_date);
 return "hello world";
}
0
Aman Sehgal