1

ステータスメッセージを変更するサービスをclojure(リングとcompojureを使用)で作成しています。組み込みの Jetty 8 で実行されています。たとえば、私は持っています

200 OK 

そして、私は次のようなものが欲しいです

200 <custome message>

EJB の世界では、ヘッダー「X-Http-Status-Message」をセットアップする可能性がありました。これは、舞台裏で何らかの魔法を行い、それに応じてメッセージを変更しました。

Jetty に同じことを可能にするヘッダーはありますか?? またはclojureでそれを行う他の方法はありますか??

4

2 に答える 2

0

Ring のドキュメントによると、メッセージではなく、ステータス コードのみを設定できます。

https://github.com/mmcgrana/ring/wiki/Concepts

また、ring.util.servlet/set-status関数は次を呼び出しますjavax.servlet.http.HttpServletResponse .setStatus(int)

(defn set-status
  "Update a HttpServletResponse with a status code."
  [^HttpServletResponse response, status]
  (.setStatus response status))

実装全体はこちら: https://github.com/ring-clojure/ring/blob/master/ring-servlet/src/ring/util/servlet.clj#L64

ステータス メッセージのオプション サポートを追加するために Ring を変更するのはかなり簡単です。

ring.util.servlet/update-servlet-response関数に変更を導入できると思います。

(defn update-servlet-response
  "Update the HttpServletResponse using a response map."
  [^HttpServletResponse response, {:keys [status headers body]}]
  (when-not response
    (throw (Exception. "Null response given.")))
  (when status
    (set-status response status))
  (doto response
    (set-headers headers)
    (set-body body)))

たとえば、応答マップに status-message キーを追加します。

https://github.com/ring-clojure/ring/blob/master/ring-servlet/src/ring/util/servlet.clj#L105

于 2013-04-17T23:25:04.837 に答える
0

そのような魔法のヘッダーではありません。

ステータスの理由は、Jetty の同じ呼び出しでステータス コードと共に設定する必要があります。
またはのいずれかを使用できjavax.servlet.http.HttpServletResponse.setStatus(int, String)ますorg.eclipse.jetty.server.Response.setStatus(int, String)

例:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
    response.setStatus(HttpServletResponse.SC_OK, "Alrighty");
}

一部のエラー状態は、このステータスの理由を上書きできないことに注意してください。しかし、一般的に、 を使用するHttpServletResponse.sendError(int, String)と期待どおりに動作します。

于 2013-04-16T17:22:46.483 に答える