2016-04-14 12 views
1

私はSpringbootのレストベースのWebアプリケーションを開発しています。 WSの1つが.docxドキュメントを返す必要があります。コードは次のとおりです。Java rest WSをダウンロードするdocx

@RequestMapping(value = "/get-doc",method = RequestMethod.GET, produces="application/vnd.openxmlformats-officedocument.wordprocessingml.document") 
public @ResponseBody HttpEntity<File> getDoc() { 
    File file = userService.getDocx(); 
    HttpHeaders header = new HttpHeaders(); 
    header.set("Content-Disposition", "attachment; filename=DocxProject.docx"); 
    header.setContentLength(file.length()); 

    return new HttpEntity<File>(file,header); 
} 

けど - 私は、このエラーが直面している:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 

私は他の質問を検索するが、それらのどれも私に解決策を与えていない、彼らはjavax.ws.rsを使用する主な理由は、私それに頼りたくはありません。

私が探しているのは、私が得たエラー、またはコードに替わるもの(javax.ws.rsに依存しないもの)の解決策です。

ありがとうございます。

+0

フィルタリングヘッダーContent-typeのように見えます。 –

答えて

1

バイトの配列を返すようにしてください。がorg.apache.commons.io.IOUtilsからである

@RequestMapping(value = "/get-doc",method = RequestMethod.GET, produces="application/vnd.openxmlformats-officedocument.wordprocessingml.document") 
public @ResponseBody byte[] getDoc() { 
    File file = userService.getDocx(); 
    FileInputStream fis = new FileInputStream(file); 
    byte[] doc = IOUtils.toByteArray(fis); 
    return doc; 
} 

IOUtils:あなたのコードを簡素化。私はテストしていませんが、イメージを返す同様のメソッドがあります。これがあなたを助けることを願っています

+0

あなたは私に解決策を指摘しました。私はmiを "File"を "byte []"に変更し、あなたが言ったようにIOUtilsを使用しましたが、私はHttpEntityを保ちました。ありがとう!! –

0

ストリームは応答として直接設定できます。

@RequestMapping(value = "/get-doc",method = RequestMethod.GET) 
public void getDoc(HttpServletResponse response){ 
    InputStream inputStream = new FileInputStream(file); 
    IOUtils.copy(inputStream, response.getOutputStream()); 
    .. 
    response.flushBuffer(); 
} 
関連する問題