2016-08-22 11 views
0

を使用してファイルのダウンロードのREST APIをあざけるながら、私は406エラーMockMVC

return new ResponseEntity<>(new InputStreamResource(myInputStream), 
       responseHeaders, HttpStatus.OK); 

RESTのAPIは次のように宣言されている返すSpringフレームワーク、使用してREST APIを実装しています:用のユニットテストを書いている間

@RequestMapping(value = "/download", method = RequestMethod.GET, 
produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE }) 

をこのAPIは、私は以下のようにMockMVCを使用しています:

final MappingJackson2HttpMessageConverter messageConverter = 
new MappingJackson2HttpMessageConverter(); 
messageConverter.setObjectMapper(new ObjectMapper()); 
messageConverter.getObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); 

this.mockMvc = 
MockMvcBuilders.standaloneSetup(myController) 
.setMessageConverters(messageConverter) 
.apply(new RestDocumentationConfigurer() 
.withScheme("https").withHost("localhost") 
.withPort(443)).build(); 

そして、私のテストケースは次のようになります。

mockMvc.perform(
org.springframework.test.web.servlet.request.MockMvcRequestBuilders 
.get(restUri)) 
.andExpect(
org.springframework.test.web.servlet.result.MockMvcResultMatchers 
.status().isOk()) 
.andDo(document("myApi")).andReturn(); 

しかし、私は私がここで行方不明ですどのようなエラー406

java.lang.AssertionError: Status expected:<200> but was:<406> 
at org.springframework.test.util.AssertionErrors.fail 

としてのステータスを取得していますか? ご協力いただければ幸いです。

答えて

0

ステータスコード406は、受け入れられないコンテンツタイプを指定するヘッダーがサーバーに存在しないことを示します。あなたはそれをあなたのmockMvc呼び出しに含める必要があります。

+0

はい、これも試しましたが、 'andExpect(content()。contentType(MediaType.APPLICATION_OCTET_STREAM_VALUE))' ですが、コンテンツタイプが設定されていないとしてエラーが発生します。 REST API応答ヘッダーにもコンテンツタイプを設定しようとしましたが、これも機能しませんでした。 – rmagarwal

+0

それは私が言ったことではありません。あなたがやっていることは、レスポンスに対する期待を設定することです。 'MockHttpServletRequestBuilder'で' accept(MediaType.APPLICATION_OCTET_STREAM) 'を呼び出すことで、適切な受け入れヘッダが設定されるように、リクエストの前提条件を設定する必要があります。 – marthursson

+0

はい、これも試しましたが、依然として406エラーが表示されます。 mockMvc.perform( \t \t \t \t get(restUri).accept(MediaType.APPLICATION_OCTET_STREAM_VALUE))andExpect(status()。isOk()) – rmagarwal

関連する問題