2010-02-03 13 views
37

Si está buscando /Resource/Id y ese recurso no existe, siempre pensé que 404 era la respuesta adecuada. Sin embargo, al devolver null desde un manejador de Jersey, obtengo un "204 Sin contenido". Probablemente pueda trabajar con cualquiera de ellos, pero tengo curiosidad por los pensamientos de los demás sobre esto.RESTful resource not found. 404 o 204? Jersey devuelve 204 en nulo devuelto por el controlador

Para responder a mi propia pregunta. Para que Jersey devuelva 404, debe lanzar una excepción.

if (a == null) 
     throw new WebApplicationException(404); 
+2

Solo una nota que si un recurso estaba vacío, es decir que realmente desea devolver 'null', entonces 204 sería el código de respuesta correcto. –

+0

@MichaelMior Estoy un poco confundido. no es el "nulo" significa que el objeto no se encuentra ?. Un conjunto vacío podría considerarse como Sin contenido, pero un valor nulo significa que ni siquiera existe, ¿verdad? –

+0

@RajaAnbazhagan Eso realmente depende de su aplicación. –

Respuesta

46

Los HTTP Code Definition afirma que los códigos que comienzan con 2 son para las llamadas exitosas y 4 para los que no tienen éxito.

  • Al obtener el 204 sólo muestra que no hay nada para volver (por lo general se puede esperar si usted hace un POST o PUT llamada que no tiene que devolver nada)

  • Al llegar a 404 indica que la llamada no tuvo éxito, por lo que no devolverá nada.

En su situación, el 404 es apropiado, no el 204! Dado que probablemente quiera decirle a la persona que llamó que hizo una llamada incorrecta.

+10

Diría que 201/202 (creado/aceptado) son más apropiados para respuestas PUT/POST vacías. –

Cuestiones relacionadas