私はScalaのLiftウェブフレームワークでRESTサービスを実装していますが、IDを知っている新しいエンティティを作成するPUTリクエストにいくつか問題があります。リフトRESTサービスがPUTリクエストを認識しない
はすでにBoot.scala
に派遣を追加しましたし、私の残りのサービスオブジェクトは、ビットのようになります。私は今にしようとしています
$ curl http://localhost:8080/api/room/abs
{
"id":"abs"
}
:私がテストしたとして
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)
})
}
GET要求が正常に動作しています作成サービスを実装して、私がPUTすると404が見つかりません:
$ 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>
15:13:50.130 [[email protected] - /api/room/] INFO net.liftweb.util.TimeHelpers - Service request (PUT) /api/room/ returned 404, took 10 Milliseconds
間違っているかもしれないもの上の任意のアイデアを:SBTオン私は要求がPUTリクエストとして認識されていることを見ることができますか?
を!ありがとうトラビス:) –
'Content-Type'を必要としない方法はありますか? –
有用な答えですが、クライアントが間違っている唯一のものが不正な形式のJSONを送信したときに、リフトの404とステータスメッセージ "The Requested URL ... was not found"が本当に混乱していると言わざるを得ない(例えば、タイプ:application/json'ヘッダーだが、本文に 'foo'を送る)。私はそれがおそらくパターンマッチングの問題か何かを得るが、それは400 Bad Requestか何かを返した場合、デバッグをより簡単にするだろう。 –