Как сделать вызов WebDav с помощью resttemplate? - PullRequest
0 голосов
/ 24 января 2019

Как мне сделать вызов WebDav с помощью resttemplate, если я пытаюсь получить файл с сервера webdav.

Раньше я делал это с помощью HttpClient, например:

public byte[] getFileAsBytes( String location ) throws FileNotFoundException, IOException {
      GetMethod method = new GetMethod( baseUrl + "/" + location );
      client.executeMethod( method );
      if ( method.getStatusCode() == HttpStatus.SC_NOT_FOUND ) {
         throw new FileNotFoundException( "Got error " + method.getStatusCode() + " : " + method.getStatusText()
               + " retrieving file from webdav server at path " + location );
      } else if ( method.getStatusCode() != HttpStatus.SC_OK ) {
         throw new IOException( "Got error " + method.getStatusCode() + " : " + method.getStatusText()
               + " retrieving file from webdav server at path " + location );
      }
      return method.getResponseBody();
   }

1 Ответ

0 голосов
/ 25 января 2019

Мне удалось поразить сервер WebDav с помощью restTemplate следующим образом:

   /**
    * This method copies the file from webdav to local system
    *
    * @param documentMetadata
    * @return
    */
   @Override
   public Document downloadFile( DocumentMetadata documentMetadata ) {
      Document document = new Document();
      String fileUrl = baseUrl + documentMetadata.getFilepath();

      ResponseEntity<byte[]> result = restTemplate.exchange(fileUrl, HttpMethod.GET, new HttpEntity<>( createHeaders( username, password )), byte[].class );


      return document;
   }

   private Void prepareDocument( ClientHttpResponse response, Document document, DocumentMetadata meta ) throws IOException {

      document.setName( meta.getFilename() );
      document.setFilePath( meta.getFilepath() );
      document.setFile( IOUtils.toByteArray( response.getBody() ) );
      return null;
   }

   public static HttpHeaders createHeaders( final String userName, final String password ) {
      log.debug( "SlateUtil.createHeaders" );
      return new HttpHeaders(){{
         String auth = userName + ":" + password;
         byte[] encodedAuth = Base64.encodeBase64(
               auth.getBytes( Charset.forName( "US-ASCII" )));
         String authHeader = "Basic " + new String( encodedAuth );
         set( "Authorization", authHeader );
      }};
   }

Для справки других людей, если они когда-либо получат этот вопрос:

вот как выглядят мои модели.

public class Document {
   private String name;
   private byte[] file;
   private String filePath;
   private String contentType;
// getters and setters 
}

public class DocumentMetadata {

   private String id;
   private String filename;
   private String filepath;
   private String extension;
   private String createdBy;
   private Date createDate;
   private String size;
   private String documentType;
   private String displayName;
    // getters and setters 

}
...