2017-12-13 4 views
0

私はREST経由で通信する必要がある2つのアプリケーションを作成しています。どちらのアプリケーションもSpringBootアプリケーションです。ほとんどのWebサービスは正常に動作していますが、ファイルのアップロードにはいくつか問題があります。私は、HTTPエラーコード400を取得スプリングレストコントローラでファイルをアップロードできません

public void uploadeFileToStorage(File file, String serverUrl) { 
    try{ 
     final MultiValueMap<String, Object> parameterMap = createMultipartFileParam(file.getAbsolutePath()); 
     parameterMap.add("file", file); 
     HttpHeaders headers = new HttpHeaders(); 
     //headers.set("Content-Type", "multipart/form-data"); 
     //headers.set("Accept", "text/plain"); 
     headers.setContentType(MediaType.MULTIPART_FORM_DATA); 

     String url = serverUrl + PathConstants.SERVER_PACKAGING_INTERFACE + PathConstants.SERVER_UPLOAD_FILE; 
     restTemplate = getRestTemplate(); 
     ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<MultiValueMap<String, Object>>(parameterMap, headers), 
       String.class); 
     System.out.println(response.getHeaders().getAccept()); 
    } catch(Exception ex) { 
     System.out.println(ex.getMessage()); 
    } finally { 
     // Delete the file from the temporary directory of the client. 
     file.delete(); 
    } 
} 

:残りテンプレートと

私のクライアント:これは私の残りのコントローラです。コメントされた行は、私が問題を解決しようとしたステートメントを示しています。それから私はJavaプログラムなしでWebサービスと通信しようとするためのHTML形式を書いた。

<html> 
<body> 
    <div> 
     <form method="POST" enctype="multipart/form-data" action="http://localhost:9292/serverPackaging/uploadFile"> 
      <table> 
       <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr> 
       <tr><td></td><td><input type="submit" value="Upload" /></td></tr> 
      </table> 
     </form> 
    </div> 

</body> 
</html> 

これも機能しません。 「要求されたリクエストパート 'ファイル'が存在しません」というエラーが表示されます。私は何をすべきかわからない。 html formularは重要ではありません。本当に重要なのは、残りのテンプレートの助けを借りて2つのアプリケーション間の通信です。ここで

がスタックトレースです:

org.springframework.web.client.HttpClientErrorException: 400 null 
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) 
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) 
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:531) 
    at de.feu.kdmp4.packagingtoolkit.client.operations.classes.ServerCommunicationOperationsImpl.uploadeFileToStorage(ServerCommunicationOperationsImpl.java:314) 
    at de.feu.kdmp4.packagingtoolkit.client.operations.facade.OperationsFacade.uploadeFileToStorage(OperationsFacade.java:49) 
    at de.feu.kdmp4.packagingtoolkit.client.service.classes.ArchiveServiceImpl.addFileReference(ArchiveServiceImpl.java:69) 
    at de.feu.kdmp4.packagingtoolkit.client.service.facades.ServiceFacade.addFileReference(ServiceFacade.java:48) 
    at de.feu.kdmp4.packagingtoolkit.client.view.prime.managedBeans.InformationPackageCreationBean.createInformationPackage(InformationPackageCreationBean.java:192) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267) 
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149) 
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:108) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:115) 
    at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:59) 
    at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:90) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:108) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1434) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 

誰もが私が間違っているの何のアイデアを持っていますか?

おかげで、 クリストファー

+1

を完全なスタックトレースを投稿してください。 – mrkernelpanic

+0

すみません。私はスタックトレースを忘れてしまった。ここに来る: – Christopher

答えて

0

は、あなたの@RequestMappingアノテーションを調整します。 nameフィールドをvalueに置き換えてください。

以下は、私にとって非常によく機能する例です。ただ、コード例のコンテキストを無視:

@PostMapping("/recipe/{id}/image") 
public String handleImagePost(@PathVariable String id, 
@RequestParam("file") MultipartFile file) { 

    log.debug("received a file for recipe with id: " + recipeId); 

    try{ 
     Recipe recipe = recipeRepository.findById(recipeId).get(); 
     Byte[] byteObjects = new Byte[file.getBytes().length]; 

     int i = 0; 

     for(byte b: file.getBytes()){ 
      byteObjects[i++] = b; 
     } 

     recipe.setImage(byteObjects); 
     recipeRepository.save(recipe); 

    }catch(IOException e){ 
     log.error("Error occured while persisting the file. " + e); 
     e.printStackTrace(); 
    } 

    return "redirect:/recipe/" + id + "/show"; 
} 

と、対応するHTML:

<form action="http://localhost/recipe/1/image" method="post" enctype="multipart/form-data"> 
      <label class="control-label">Select File</label> 
      <input id="file" name="file" type="file" class="file"> 
      <button type="submit" class="btn btn-primary">Submit</button> 
</form> 
+0

ありがとうございました。残念ながら、それは動作しません。私はまだ同じエラーが発生します。必要なリクエストパート 'file'が存在せず、あなたのコードからレシピロジックを差し引いたものを使用しました。 – Christopher

+0

@RequestParam( "file")を削除しましたが、このメソッドは呼び出されましたが、パラメータファイルはnullです。 – Christopher

+0

あなたはなぜその答えを正しいものとしてマークしませんでしたか? – rieckpil

関連する問題