3

私は Spring Web MVC を使用しており、3D コンテンツを表示する Web ページのプラグインにバイナリ データを返すコントローラーを作成しました。このプラグインはモデルに STK ファイルを使用するため、*.stk URL に対してこの種のコンテンツを生成するように Web アプリケーションをセットアップしました。

springDispatcherServlet は、web.xml で *.stk リクエストを処理するようにセットアップされています

<servlet-mapping>
    <servlet-name>springDispatcherServlet</servlet-name>
    <url-pattern>*.stk</url-pattern>
</servlet-mapping>

私のコントローラーは次のようになります。

@Controller
@RequestMapping(value="/3dobject", produces="application/octet-stream")
public class Object3DController {

    @Autowired
    private DesignerService designerService;

    @RequestMapping(value="/{article}.stk", method=RequestMethod.GET, headers="Accept: application/octet-stream")
    public void getObject3DForArticle(HttpServletResponse response, @PathVariable String article) throws IOException {
        response.setContentType("application/octet-stream");
        Object3D object = designerService.get3DModelForArticleNumber(article, LanguageCode.NORWEGIAN);
        byte[] content = object.getContent();
        response.setContentLength(content.length);
        IOUtils.write(content, response.getOutputStream());
    }
}

ブラウザからデータにアクセスしようとすると、次のエラーが表示されます。

HTTP ステータス 406 - このリクエストで識別されたリソースは、リクエストの「accept」ヘッダーによると、受け入れられない特性を持つレスポンスしか生成できません。

アプリを localhost の tomcat サーバーにデプロイしました。

ブラウザにバイナリデータをダウンロードさせるために何をしなければならないかについてのアイデアはありますか?

PS!*.3do (3d オブジェクト) から *.stk に変更しました。3do では期待どおりに動作しましたが、プラグインがエラー (解釈が難しい) で失敗したため、URL 拡張子が問題であるかどうかを確認するために実験する必要があります...

4

1 に答える 1

0

RequestMapping.produces()リクエストを絞り込むため、

Acceptがこれらのメディア タイプのいずれかに一致する場合にのみマップされます

そのため、プラグインからのリクエストに対応するAcceptヘッダーを設定する必要があります。これは、ブラウザーに URL を入力して HTTP GET 要求を行うだけでは実行できません。Chrome で便利なプラグインの 1 つにAdvanced REST Clientがあります。同様の機能を提供するものは他にもたくさんあります。cURLまたは、 を使用して、正しいヘッダーでリクエストを作成してみてください。

于 2013-04-19T12:18:07.233 に答える