मैं स्कैला में Lift वेब ढांचे के साथ एक आरईएसटी सेवा लागू कर रहा हूं और मुझे एक नई इकाई बनाने के लिए PUT अनुरोध के साथ कुछ समस्याएं हैं जिनके लिए मुझे आईडी पता है।लिफ्ट आरईएसटी सेवा PUT अनुरोध को पहचानने के लिए
पहले से ही Boot.scala
को प्रेषण जोड़ा गया है और मेरे बाकी सेवा वस्तु इस तरह एक सा दिखता है:
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)
})
}
प्राप्त अनुरोधों को ठीक से काम कर रहे हैं के रूप में मैं के साथ परीक्षण किया:
$ curl http://localhost:8080/api/room/abs
{
"id":"abs"
}
मैं अब कोशिश कर रहा हूँ निर्माण सेवा को कार्यान्वित करें और जब मैं पुट करता हूं तो मुझे 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>
एसबीटी पर मैं देख सकता हूँ कि अनुरोध PUT अनुरोध के रूप में पहचाना जा रहा है:
15:13:50.130 [[email protected] - /api/room/] INFO net.liftweb.util.TimeHelpers - Service request (PUT) /api/room/ returned 404, took 10 Milliseconds
क्या गलत हो सकता पर कोई भी विचार?
यह सुनिश्चित किया! धन्यवाद बहुत ट्रैविस :) –
क्या 'सामग्री-प्रकार' की आवश्यकता नहीं है? –
सहायक उत्तर, लेकिन मुझे यह कहना है कि मुझे लिफ्ट का 404 मिल गया है और "अनुरोधित यूआरएल ... का पता नहीं मिला" वास्तव में उलझन में है जब क्लाइंट गलत काम करता है तो विकृत JSON भेजता है (उदाहरण के लिए 'सामग्री- टाइप करें: एप्लिकेशन/जेसन 'हेडर लेकिन शरीर में' foo' भेजना)। मुझे लगता है कि यह शायद एक पैटर्न मिलान करने वाला मुद्दा या जो भी हो, लेकिन अगर यह 400 खराब अनुरोध या कुछ लौटाता है तो यह अधिक सरलता से डिबगिंग करेगा। –