api – 提升REST服务无法识别PUT请求
发布时间:2020-12-16 18:15:17 所属栏目:安全 来源:网络整理
导读:我正在使用 Scala中的 Lift Web框架实现REST服务,并且我在创建一个我知道ID的新实体的PUT请求时遇到了一些问题. 已经将调度添加到Boot.scala,我的其他服务对象看起来有点像这样: package codepackage libimport model._import net.liftweb._import common._
我正在使用
Scala中的
Lift Web框架实现REST服务,并且我在创建一个我知道ID的新实体的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) }) } 我测试时GET请求正常工作: $curl http://localhost:8080/api/room/abs { "id":"abs" } 我现在正在尝试实现创建服务,并且当我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> 在SBT上,我可以看到请求被识别为PUT请求: 15:13:50.130 [414557038@qtp-135607724-2 - /api/room/] INFO net.liftweb.util.TimeHelpers - Service request (PUT) /api/room/ returned 404,took 10 Milliseconds 关于可能出错的任何想法? 解决方法
您测试PUT请求的方式有三个问题.
最重要的是,您需要将Content-Type标头设置为application / json(而不是Accept标头或除Accept标头之外). 接下来,您需要在JSON中使用双引号:-d'[{“id”:“abs”}]’. (双引号实际上是required for strings in valid JSON.一些JSON解析器将接受单引号,但不接受Lift.) 最后,从URL中删除尾部斜杠.它将“索引”添加到路径列表的末尾,这意味着您将无法在您的案例中获得匹配Nil JsonPut …行. 以下应该有效: curl -i -H "Content-Type: application/json" -X PUT -d '[{"id":"abs"}]' http://localhost:8080/api/room (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |