Gestion erreur 404 Javax ws rs

Fermé
Rayan9513 - 23 févr. 2016 à 17:19
KX Messages postés 16642 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 5 décembre 2022 - 24 févr. 2016 à 13:57
Bonjour tout le monde,

Comme énoncé dans le titre j'aimerais généré un code JSON erreur 404 mais je ne vois pas comment faire. Pourriez vous me donner des pistes?

Voici mon web.xml:

<servlet>
<servlet-name>rest-v1</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>main.java.v1</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest-v1</servlet-name>
<url-pattern>/v1/*</url-pattern>
</servlet-mapping>
</web-app>


Classe CountriesRessource:

@Path(value = "/countries")
public class CountriesRessource {
@GET
@Produces("application/json;charset=utf-8")
public Response status() { ....


Merci à vous pour votre aide.

1 réponse

KX Messages postés 16642 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 5 décembre 2022 2 984
23 févr. 2016 à 20:06
Bonjour,

Normalement avec une page 404 tu ne devrais pas avoir de contenu (puisqu'il n'est pas trouvé) donc pas de JSON...

Par contre pour indiquer le statut comme ceci :

public Response status() {
    return Response.ResponseBuilder.status(Response.Status.NOT_FOUND).build();
}

Voir la documentation : ResponseBuilder status(Response.Status status)
0
Donc je ne peux pas renvoyer un JSON avec écrit erreur 404?
Dans mon @Path, j ai value = /countries et j aimerais que lorsque l URI ne contient pas /countries un JSON avec erreur 404 apparaît
0
KX Messages postés 16642 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 5 décembre 2022 2 984
24 févr. 2016 à 08:51
Les statuts comme 404 doivent apparaître dans les headers HTTP, cette information sera utilisée par les applications qui appellent le service REST (client JavaScript, serveur tiers, etc) et pour qui le contenu d'une page 404 n'a aucune importance. Toi tu testes probablement directement avec un navigateur donc tu as envie de voir quelque chose à l'écran, mais c'est une mauvaise compréhension du rôle du service REST, c'est un fournisseur de données, pas de présentation comme HTML.

Ceci étant dit, en Java rien ne t'empêche de mettre un contenu dans ta page 404, il faut juste le rajouter à ton RequestBuilder.
0
Tu aurais pas un exemple pour l ajouter dans le request builder ?
0
KX Messages postés 16642 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 5 décembre 2022 2 984
24 févr. 2016 à 13:52
Je t'ai donné la documentation de ResponseBuilder plus haut, il n'y a rien de compliqué, il suffit d'utiliser la méthode entity.

return Response.ResponseBuilder.entity("toto").status(404).build();

Mais j'insiste sur le fait qu'une 404 ne devrait pas avoir de contenu... ce qui fait que c'est une 404 c'est la méthode status, pas la méthode entity...
0
Oui mais je veux pas le faire dans mon path mais dans tous les path différents de /countries
0