2010-12-17 10 views
11

Estoy empezando con REST y he estado leyendo this publicación y la mencionada book sobre REST response codes. Cuando miro a la clase de juego Controller sin embargo, parece estar limitada a regresarDevolver códigos de respuesta RESTful en Play

  • 200 - OK
  • 301 - Movido permanentemente
  • 302 - Encontrado
  • 304 - No modificado
  • 400 - Solicitud incorrecta
  • 401 - no autorizados
  • 403 - Prohibida
  • 404 - No se ha encontrado
  • 5xx

que parece dejar de lado algunos códigos potencialmente útiles que se han mencionado:

  • 201 - Creación (buena respuesta para el éxito posterior JSON?)
  • 202 - Aceptado (para solicitudes en cola)
  • 204 - Sin contenido (posible respuesta para PUT/POST/DELETE satisfactorio)
  • 307 - Redireccionamiento temporal
  • 405 - Método no permitido
  • 406 - No aceptable
  • 409 - Conflicto
  • 410 - Gone
  • 415 - no admitido Tipo de soporte (esto parece la respuesta apropiada para una solicitud de formato JSON cuando no hay JSON la plantilla está definida)

¿No son necesarios después de todo? ¿Juega Play esas situaciones automáticamente?

También parece que un controlador no puede manejar muy bien las solicitudes REST y las solicitudes normales de la página web, ya que las páginas web siempre se devuelven con 200. ¿Me estoy perdiendo algo allí?

Respuesta

11

Si examina el código Juego Fuente (Play 1.1) en el objeto play.mvc.Http.StatusCode, Juego parece tener los siguientes códigos

public static final int OK = 200; 
public static final int CREATED = 201; 
public static final int ACCEPTED = 202; 
public static final int PARTIAL_INFO = 203; 
public static final int NO_RESPONSE = 204; 
public static final int MOVED = 301; 
public static final int FOUND = 302; 
public static final int METHOD = 303; 
public static final int NOT_MODIFIED = 304; 
public static final int BAD_REQUEST = 400; 
public static final int UNAUTHORIZED = 401; 
public static final int PAYMENT_REQUIERED = 402; 
public static final int FORBIDDEN = 403; 
public static final int NOT_FOUND = 404; 
public static final int INTERNAL_ERROR = 500; 
public static final int NOT_IMPLEMENTED = 501; 
public static final int OVERLOADED = 502; 
public static final int GATEWAY_TIMEOUT = 503; 

Esto indicaría reconocimiento de algunos de los códigos su han identificado, como los 201, 202, 204. Sin embargo, los valores 307, 405, 406, 409, 410 y 415 no están allí.

Además, 201, 202, 204 están reconocidos, pero no se mencionan en ningún otro lugar dentro del código fuente. Entonces, a menos que el servidor Netty, o uno de los archivos jar suministrados los esté administrando para Play (lo que no estoy seguro de que pueda hacer), no veo cómo Play puede manejar mágicamente estas situaciones sin conocer la base de códigos.

Al mirar el código de renderJSON, no parece establecer el código de estado como parte del envío de los resultados (por lo que usa el valor predeterminado 200), por lo que el siguiente truco puede funcionar.

public static void myJsonAction() { 
    response.status = 201; 
    renderJSON(jsonString); // replace with your JSON String 
} 
+0

Probé a cabo el ajuste 'response.status' y, efectivamente, es así de simple. –

+0

¿Alguna idea de dónde están estas constantes en Play 2.x? ¿Qué hay de Play 2.x Scala? –

+0

Se encontraron los códigos de respuesta de Scala 2.x p. play.api.mvc.Results # NoContent –

4

En la versión actual jugar tienes que utilizar status() lugar. Ejemplo:

status(201, jsonData); 

En Scala debería funcionar como en este ejemplo tomado de la official docs:

Status(488)("Strange response type") 
+0

cómo puedo usarlo en scala, he buscado allí no es un método como el estado() –

Cuestiones relacionadas