2017-10-02 22 views
0

こんにちは私は、ユーザーがファイルをアップロードして後でダウンロードできるアプリケーションを作成しています。私が見つけたのは、ファイル拡張子がrestTemplate.getForEntityから削除され、RequestMappingが完全なファイル名を取得しないということです。誰もがこれが正しいとこれを克服する方法を確認できますか?RestTemplate.getForEntityはファイル拡張子を削除しますか?

コントローラー:

@RequestMapping(value = "/uploaded/{filename}", method = RequestMethod.GET) 
public ResponseEntity<Resource> getUploaded(@PathVariable String filename) { 
    logger.debug("getUploaded filename=" + filename); 

    Resource file = storageService.loadAsResource(filename + ".png"); 

    return ResponseEntity.ok().body(file); 
} 

ユニットテスト:

System.err.println("imageUpload = " + imageUpload); 
    ResponseEntity<Resource> responseResource = this.restTemplate.getForEntity("/uploaded/" + imageUpload, Resource.class); 
    assertNotNull(responseResource); 
    System.err.println("responseResource = " + responseResource.toString()); 
    assertEquals(HttpStatus.FOUND, responseResource.getStatusCode()); 
    assertEquals(resource, responseResource.getBody()); 

ロギングショー:

imageUpload = favicon1.png 
getUploaded filename=favicon1 
responseResource = <200 OK,Byte array resource [resource loaded from byte array],{Content-Type=[image/png], Content-Length=[8971], Date=[Mon, 02 Oct 2017 01:58:39 GMT]}> 

あなたが見ることができるように、imageUploadは '.PNG' の拡張子を持つファイル名であり、 restTemplate.getForEntity()に正しく渡されますが、getUploaded()は拡張子なしのファイル名のみを受け取ることができます。したがって、私はt手動で醜い '.png'を追加してください。だから、私の実装に何か問題があるのか​​、誰かがこのファイル拡張問題を解決する方法が一般的であるのかどうかはわかりません。

+0

はcontentnegotiatingリゾルバを使用してみてください。デフォルトでは、URLに拡張子をつけて何かを渡すと、コンテンツリゾルバを見つけようとします。 http://websystique.com/springmvc/spring-4-mvc-contentnegotiatingviewresolver-example/ – chetank

答えて

0

最終的な解決策:

@Configuration 
public class WebMvcConfiguration extends WebMvcConfigurerAdapter { 
    @Override 
    public void configurePathMatch(PathMatchConfigurer matcher) { 
     matcher.setUseRegisteredSuffixPatternMatch(true); 
    } 
} 
関連する問題