2011-11-23 1 views
12

これはこのサイトでは有効な質問ではありませんが、ContentNegotiatingViewResolverを経験した人がこれを見て、正しく設定しても404のメッセージを送信するのに役立つかどうかを知ることができますか?My Spring-MVC ContentNegotiatingViewResolverは正しく設定されていますか?サポートされていないメディアタイプに対して404エラーを送信するにはどうすればよいですか?

私がしたいのは、拡張子のないすべてのURLをHTML表現(私の場合はfreemarkerビュー)にすることです。私は代わりにjsonをレンダリングするために、それらに ".json"を付加したURLを受け入れたいと思います。これはfirefox、すなわちchromeで動作するようです。私はそれが他のブラウザで動作すると思いますか?私はacceptヘッダーを無効にすることを確かめました。なぜなら、ドキュメントがそうするように実際には動作しない悪質な機能だからです。

私は ".stuff"でURLにアクセスしようとしましたが、何が起こるかを見るために、私の設定では空白の画面が表示されます。これは受け入れられますか? 404エラーを送信する方法はありますか?

私は正しく構成されていないことがありますか?

<bean id="contentNegotiatingViewResolver" 
     class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="order" value="1"/> 
    <property name="ignoreAcceptHeader" value="true" /> 
    <property name="defaultContentType" value="text/html" /> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="json" value="application/json"/> 
     </map> 
    </property> 
    <property name="useNotAcceptableStatusCode" value="true" /> 
    <property name="defaultViews"> 
     <list> 
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
       <property name="contentType" value="application/json" /> 
      </bean> 
     </list> 
    </property> 
    <property name="viewResolvers"> 
     <list> 
      <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> 
       <property name="contentType" value="text/html" /> 
       <property name="order" value="2"/> 
       <property name="cache" value="true"/> 
       <property name="prefix" value=""/> 
       <property name="suffix" value=".ftl"/> 
       <property name="exposeSpringMacroHelpers" value="true"/> 
      </bean> 
     </list> 
    </property> 
</bean> 

答えて

1

デフォルトのコンテンツタイプが設定されているため、ネゴシエーションは常にフリーメーカビューによって配信される一致するコンテンツタイプを見つけることになります。 ContentNegotiatingViewResolverのjavadocのからの引用:他のメカニズムは、(ヘッダ、ファイル拡張子や パラメータを受け入れる)試合にはなりませんときにも直接setDefaultContentTypeを設定することができます

、 が返されます。

この設定では、ファイル拡張子.stuffはcontentType text/htmlと一致します。

はその後、useNotAcceptableStatusCodeで:一致が 見つからない場合

406(許容できない)ステータスコードが返されます。

私はちょうどこの(別のRESTサービスアプリの設定で)しようとしたクロムは、メッセージ表示見た:この要求によって識別されたリソースは、要求に応じて許容できない特性を有する応答を生成することができるだけである「受け入れる」をヘッダー()。

0

web.xmlに ".stuff"のurl-patternを追加しましたか? PathExtensionContentNegotiationStrategyを使用していますが、同じ理由があります。春のサーブレットはこのリクエストに応答することができないので、404エラーが発生し、500または416になりません。もし416であれば、ヘッダーが変更され、jQueryのseetingまたはhttpクライアントヘッダーが変更されます。

関連する問題