13

私は REST を使い始めたばかりで、この投稿と、REST応答コードに関する前述のを読んでいます。ただし、 Play のControllerクラスを見ると、返すだけに制限されているようです。

  • 200 - OK
  • 301 - 恒久的に移動
  • 302 - 見つかった
  • 304 - 変更されていません
  • 400不正な要求
  • 401 - 許可されていません
  • 403禁止します
  • 404お探しのページが見つかりませんでした
  • 5xx

それは言及されたいくつかの潜在的に有用なコードを除外しているようです:

  • 201 - 作成済み (成功した JSON 投稿に対する適切な応答?)
  • 202 - 受け入れ済み (キューに入れられた要求の場合)
  • 204 - No Content (PUT/POST/DELETE が成功した場合の可能な応答)
  • 307 - 一時的なリダイレクト
  • 405 - メソッドは許可されていません
  • 406 - 受け入れられない
  • 409 - 紛争
  • 410 - いなくなった
  • 415 - サポートされていないメディア タイプ (これは、JSON テンプレートが定義されていない場合の JSON 形式の要求に対する適切な応答のようです)

結局、それらは必要ありませんか?Play はこれらの状況を自動的に処理しますか?

また、Web ページは常に200. 私はそこに何か欠けていますか?

4

2 に答える 2

12

play.mvc.Http.StatusCodeオブジェクトのPlayソースコード(Play 1.1)を見ると、Playには次のコードがあるように見えます

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、202、204など、特定したコードの一部が承認されたことを示します。ただし、値307、405、406、409、410、および415はありません。

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

renderJSONのコードを見ると、結果の返送の一部としてステータスコードが設定されていないように見えるため(デフォルトの200を使用)、次のハック機能する可能性があります。

public static void myJsonAction() {
    response.status = 201;
    renderJSON(jsonString); // replace with your JSON String
}
于 2010-12-18T10:43:17.430 に答える