Tôi đang triển khai dịch vụ REST với khung web Lift trong Scala và tôi đang gặp một số vấn đề với yêu cầu PUT để tạo một thực thể mới mà tôi biết ID.Dịch vụ REST REST không nhận ra yêu cầu PUT
Đã thêm công văn đến Boot.scala
và đối tượng phục vụ còn lại của tôi trông hơi như thế này:
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)
})
}
yêu cầu GET đang làm việc đúng như tôi thử nghiệm với:
$ curl http://localhost:8080/api/room/abs
{
"id":"abs"
}
bây giờ tôi đang cố gắng để triển khai dịch vụ tạo và tôi tiếp tục nhận được 404 không tìm thấy khi tôi 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>
Trên SBT, tôi có thể thấy rằng yêu cầu được công nhận là yêu cầu PUT:
15:13:50.130 [[email protected] - /api/room/] INFO net.liftweb.util.TimeHelpers - Service request (PUT) /api/room/ returned 404, took 10 Milliseconds
Bất kỳ ý tưởng nào về điều gì có thể sai?
Nó chắc chắn đã làm! Cảm ơn rất nhiều Travis :) –
Có cách nào để KHÔNG yêu cầu 'Content-Type' không? –
Câu trả lời hữu ích, nhưng tôi phải nói rằng tôi tìm thấy thông báo 404 và trạng thái của "URL được yêu cầu ... không được tìm thấy" thực sự gây nhầm lẫn khi điều duy nhất mà khách hàng làm sai là gửi JSON không đúng định dạng (ví dụ: gửi đúng nội dung ' Gõ: application/json' header nhưng gửi 'foo' vào phần thân). Tôi nhận được nó có thể là một vấn đề phù hợp với mô hình hoặc bất cứ điều gì, nhưng nó sẽ làm cho gỡ lỗi đơn giản hơn nếu nó trả về 400 yêu cầu xấu hoặc một cái gì đó. –