2016-10-05 9 views
0

Play 1.xにこの機能があるようですが、2.xのドキュメントでは例が見つかりません。 acceptsまたはcontent-typeが一致しない場合、415を返すようにコントローラを設定する方法はありますか?私はこのようなコントローラで手動で操作を行うことができます。Playを使用してサポートされていないメディアタイプを返す方法415

// for GET, POST, PUT, etc. 
if (!request().accepts(Http.MimeTypes.JSON)) { 
    return new StatusHeader(UNSUPPORTED_MEDIA_TYPE); 
} 
// for POST, PUT, PATCH, etc. 
if (!request().contentType().orElse("").equals(Http.MimeTypes.JSON)) { 
    return new StatusHeader(UNSUPPORTED_MEDIA_TYPE); 
} 

しかし、これはすべてのコントローラメソッド内のコードのブロックを使用する必要がO/Wフレームワークによってサポートされるべきものであるように思えます。

答えて

1

Play 2.5.xはこれをサポートしています。

私の例はScalaですが、Java APIを使っても同じことができますが、以下のドキュメントを確認してください。クライアントは、Content-Typeのためのapplication/json以外を送信しようとした場合は、明示的なparse.jsonボディパーサーを使用していることを指定することで

// Scala example 

def accept = Action(parse.json) { implicit request => 
    render { 
     case Accepts.Json() => Ok(Json.parse("""{"message" : "Thanks for sending and accepting JSON"}""")) 
    } 
    } 

、再生が自動的にあなたのための415コードで結果を構築します。このビットをカバーするthe Java examplesを参照してください。

case Accepts.Json()は、メディアタイプが範囲内にあることをテストする抽出プログラムです(ユースケースではapplication/json)。クライアントが別のメディアタイプを送信する場合、私はPlayが406 Not Acceptableを構築すると考えています。 the Java examplesを参照してください。

+0

ありがとうございました。私はドキュメントを見て誓ったが、なんとなくこれを逃した。 – Eric

関連する問題