3

postHandle() メソッドに HTTP ヘッダーを追加しようとする Spring Interceptor があります。

public void postHandle(HttpServletRequest req, HttpServletResponse resp, 
             Object obj1, ModelAndView mv)
        throws Exception {
        response.setHeader("SomeHeaderSet", "set");
        response.addHeader("SomeHeaderAdd", "added");
    }
}

ただし、setHeader() または addHeader() ではどちらのヘッダーも追加されません。

これはインターセプターで行うことも有効ですか? 私はそれがうまくいくだろうと考えましたが、うまくいきません。

よろしく、 ダスティン

4

3 に答える 3

1

さて、私はそれを理解しました...ちょっと...

JettyとTomcatで同じ問題が発生しました(コンテナの問題である可能性があります)。それで...

Springがコンテナに戻るまで、応答オブジェクトに正しいヘッダー値が含まれていることを確認するためにデバッグされました。結果:HttpServletResponseインスタンスにはまだ正しいヘッダー値がありました。

response.setContentLength()ヘッダーで何かをする前に、コードで呼び出していたことがわかりました。コメントアウトすると、すべて正常に機能します。

それで、残りの謎は、なぜ呼び出しはresponse.setContentLength()物事をロックダウンし、ヘッダーを変更できないのですか?コンテンツ本体が他のヘッダーとは何の関係もないと思いました。

于 2008-10-29T16:43:55.103 に答える
1

preHandle メソッドでヘッダーを設定しようとしましたか? それでもうまくいかない場合は、コンテナーのフィルターを作成し、代わりにヘッダーを設定してみてください。

于 2008-10-29T13:49:38.277 に答える
0

同様の問題がありました.web.xmlに次のものがある場合に機能します(理由はわかりません)

<filter>
  <filter-name>etagFilter</filter-name>
    <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>etagFilter</filter-name>
  <servlet-name>myServlet</servlet-name>
</filter-mapping>
于 2010-06-22T12:21:21.883 に答える