2010-12-17 8 views
11

私はちょうどRESTを使い始めています。this投稿と、についてREST response codesと書いてあります。永久 PlayでRESTfulレスポンスコードを返す

  • 302移動 - -
  • 301 OK - 私はしかし、プレイのControllerクラスを見てみると、

    • 200の復帰に限定しているようだ を変更していない -
    • 304を発見します - 不正な要求
    • 401から
    • 403を認可されない -
    • 404を禁止 -
    • 5xxの
    • 述べたいくつかの潜在的に有用なコードを残しているようだ

    が見つかりません:

    • 201 - (受け入れ - (成功したJSONのポストのための良好な応答?)
    • 202作成されました
    • 204 - 内容なし(PUT/POST/DELETEの成功の可能性があります)
    • 307 - 一時的なリダイレクト
    • 405 - 許容できない
    • 409 - - 方法
    • 406不可競合
    • 410から
    • 415ゴーン - サポートされていないメディアタイプ(これはJSON形式ないJSONの要求のために適切な応答のように思えますテンプレートが定義されています)

    結局必要ないのですか?プレイは自動的にそれらの状況を処理していますか?

    また、Webページが常に200で返されるため、1つのコントローラが同じリソースに対するREST要求と通常のWebページ要求を非常にうまく処理できないようです。そこに何かが欠けていますか? play.mvc.Http.StatusCodeオブジェクトでプレイソースコード(1.1プレイ)、プレイを見てみると

  • 答えて

    11

    は、以下のコード

    public static final int OK = 200; 
    public static final int CREATED = 201; 
    public static final int ACCEPTED = 202; 
    public static final int PARTIAL_INFO = 203; 
    public static final int NO_RESPONSE = 204; 
    public static final int MOVED = 301; 
    public static final int FOUND = 302; 
    public static final int METHOD = 303; 
    public static final int NOT_MODIFIED = 304; 
    public static final int BAD_REQUEST = 400; 
    public static final int UNAUTHORIZED = 401; 
    public static final int PAYMENT_REQUIERED = 402; 
    public static final int FORBIDDEN = 403; 
    public static final int NOT_FOUND = 404; 
    public static final int INTERNAL_ERROR = 500; 
    public static final int NOT_IMPLEMENTED = 501; 
    public static final int OVERLOADED = 502; 
    public static final int GATEWAY_TIMEOUT = 503; 
    

    を持っているように見えますこれは、201のように、あなたが特定したコードの一部の承認を示すことになります、しかし、値307,405,406,409,410,415は存在しない。

    また、201,202,204は承認されていますが、ソースコード内の他の場所では参照されません。したがって、Nettyサーバーまたは提供されたjarファイルの1つがPlay用にこれらを管理していない限り、私はコードベースを知らなくてもこれらの状況をMagicがどのように魔法のように処理できるかはわかりません。

    renderJSONのコードを見ると、ステータスコードを結果を返すように設定していないので、次のハックになる可能性があります。

    public static void myJsonAction() { 
        response.status = 201; 
        renderJSON(jsonString); // replace with your JSON String 
    } 
    
    +0

    私は 'response.status'と案の定を設定してテストし、それだけでは簡単です。 –

    +0

    この定数がPlay 2.xのどこにあるのでしょうか? Play 2.x Scalaはどうですか? –

    +0

    Scala 2.xレスポンスコードが見つかりました。 play.api.mvc.Results#NoContent –

    4

    現在の再生バージョンでは、代わりにstatus()を使用する必要があります。例:それはofficial docsから取られたこの例のように動作するはずScalaで

    status(201, jsonData); 
    

    Status(488)("Strange response type") 
    
    +0

    どうすればscalaで使うことができますか?status()のようなメソッドはありません。 –

    関連する問題