Estoy implementando un servicio REST con el marco web Lift en Scala y estoy teniendo algunos problemas con la solicitud PUT para crear una entidad nueva para la que conozco la ID.Levante el servicio REST que no reconoce la solicitud PUT
Ya se añadió el envío a Boot.scala
y mi objeto de servicio resto se ve un poco como esto:
package code
package lib
import model._
import net.liftweb._
import common._
import http._
import rest._
import util._
import Helpers._
import json._
object RestService extends RestHelper {
serve("api"/"room" prefix {
// /api/room returns all the rooms
case Nil JsonGet _ => Room.registredRooms: JValue
// /api/room/count gets the room count
case "count" :: Nil JsonGet _ => JInt(Room.registredRooms.length)
// /api/room/room_id gets the specified room (or a 404)
case Room(room) :: Nil JsonGet _ => room: JValue
// DELETE the room in question
case Room(room) :: Nil JsonDelete _ =>
Room.delete(room.id).map(a => a: JValue)
// PUT adds the room if the JSON is parsable
case Nil JsonPut Room(room) -> _ => Room.add(room): JValue
// POST if we find the room, merge the fields from the
// the POST body and update the room
case Room(room) :: Nil JsonPost json -> _ =>
Room(mergeJson(room, json)).map(Room.add(_): JValue)
})
}
peticiones GET están funcionando correctamente como Probé con:
$ curl http://localhost:8080/api/room/abs
{
"id":"abs"
}
Ahora estoy tratando de implementar el servicio de creación y sigo obteniendo un 404 no encontrado cuando PUT:
$ curl -i -H "Accept: application/json" -X PUT -d "[{'id':'abs'}]" http://localhost:8080/api/room/
HTTP/1.1 404 Not Found
Expires: Sun, 4 Sep 2011 14:13:50 UTC
Set-Cookie: JSESSIONID=t1miz05pd5k9;Path=/
Content-Length: 106
Cache-Control: no-cache, private, no-store
Content-Type: text/html; charset=utf-8
Pragma: no-cache
Date: Sun, 4 Sep 2011 14:13:50 UTC
X-Lift-Version: 2.4-M3
Server: Jetty(6.1.22)
<!DOCTYPE html>
<html> <body>The Requested URL /api/room/ was not found on this server</body> </html>
En SBT puedo ver que la solicitud está siendo reconocida como una solicitud PUT:
15:13:50.130 [[email protected] - /api/room/] INFO net.liftweb.util.TimeHelpers - Service request (PUT) /api/room/ returned 404, took 10 Milliseconds
Alguna idea sobre lo que podría estar mal?
Seguro que lo hizo! Muchas gracias Travis :) –
¿Hay alguna manera de NO requerir ese 'Content-Type'? –
Respuesta útil, pero debo decir que encuentro que el 404 de Lift y el mensaje de estado de "La URL solicitada ... no se encontró" realmente confunden cuando lo único que el cliente hace mal es enviar JSON malformado (por ejemplo, enviar correctamente el 'Content- Escriba: application/json' header pero enviando 'foo' en el cuerpo). Entiendo que es probable que sea un problema de coincidencia de patrones o lo que sea, pero haría la depuración más sencilla si devolviera 400 Bad Request o algo así. –