J’écris une application web REST (NetBeans 6.9, JAX-RS, TopLink Essentials) et j’essaie de renvoyer JSON et le code d’état HTTP. J'ai un code prêt à l'emploi qui renvoie JSON lorsque la méthode HTTP GET est appelée par le client. Essentiellement :
@Path("get/id")
@GET
@Produces("application/json")
public M_機械 getMachineToUpdate(@PathParam("id") String id) {
// some code to return JSON ...
return myJson;
}
Mais je veux aussi renvoyer un code d'état HTTP (500, 200, 204, etc.) avec les données JSON.
J'ai essayé d'utiliser HttpServletResponse
:
response.sendError("error message", 500);
Mais cela a fait croire au navigateur qu'il s'agissait d'une "vraie" ; 500 et la page Web de sortie était une page d'erreur HTTP 500 normale.
Je veux renvoyer un code d'état HTTP pour que mon JavaScript côté client puisse gérer une logique qui en dépend (par exemple, afficher le code et le message d'erreur sur une page HTML). Est-ce possible ou les codes d'état HTTP ne doivent-ils pas être utilisés pour ce genre de choses ?
Voici un exemple :
@GET
@Path("retrieve/{uuid}")
public Response retrieveSomething(@PathParam("uuid") String uuid) {
if(uuid == null || uuid.trim().length() == 0) {
return Response.serverError().entity("UUID cannot be blank").build();
}
Entity entity = service.getById(uuid);
if(entity == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Entity not found for UUID: " + uuid).build();
}
String json = //convert entity to json
return Response.ok(json, MediaType.APPLICATION_JSON).build();
}
Regardez la classe [Response][1].
Notez que vous devez toujours spécifier un type de contenu, en particulier si vous transmettez plusieurs types de contenu, mais si chaque message est représenté en JSON, vous pouvez simplement annoter la méthode avec @Produces("application/json" ;)
.
[1] : http://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Response.html
JAX-RS prend en charge les codes HTTP standard et personnalisés. Voir ResponseBuilder et ResponseStatus, par exemple :
Gardez à l'esprit que les informations JSON concernent davantage les données associées à la ressource/application. Les codes HTTP concernent davantage l'état de l'opération CRUD demandée. (du moins, c'est ce qui est censé se passer dans les systèmes REST).