Handler
内では、Response
が引数として渡されます:
Response
構造体は HTTP レスポンスの全要素をカプセル化し、HTTP レスポンスを構築・操作するための完全な API を提供しますres.status_code(200).body("Hello")
)をサポートし、レスポンスを流暢に構築できます&mut self
で自身の参照を返すため、ハンドラが HTTP レスポンスを簡単に構築・カスタマイズでき、様々な Web サービス要件を満たせますサーバ゙ーがクライアントからのリクエストを受信した後、マッチした任意の Handler
とミドルウェアは Response
にデータを書き込むことができます。特定の場合、例えばあるミドルウェアが後続のミドルウェアと Handler
の実行を阻止したい場合、FlowCtrl
を使用できます:
Response
にデータを書き込むのは非常に簡単です:
プレーンテキストデータの書き込み
JSON シリアライズデータの書き込み
render
メソッドを複数回呼び出して JSON データを書き込む場合、これらのデータは 1 つの JSON オブジェクトにマージされず、独立したテキストフラグメントとして順番に連結されるため、無効な JSON フォーマットになる可能性があります。複数のデータを返す必要がある場合は、それらを 1 つのオブジェクトに組み合わせてから一度にシリアライズするか、ロジックを自行処理してください。
HTML の書き込み
render
を使用すると、Response
に詳細なエラー情報を書き込めます。
カスタムエラー情報が不要な場合は、直接 set_http_code
を呼び出せます。
render
メソッドを使用すると、Response
にリダイレクトレスポンスを書き込み、新しいURLにナビゲートできます。Redirect::found メソッドを呼び出すと、HTTP ステータスコードが 302(Found)に設定され、一時的なリダイレクトを意味します。
Response が返す Body タイプは ResBody
です。これは列挙型で、エラーが発生した場合に ResBody::Error
に設定されます。ここにはエラー情報が含まれており、エラー処理を遅延させるために使用されます。StatusError
は実際には Writer
を実装していないため、Catcher
で独自の表示方法をカスタマイズできます。