2016-03-25 4 views
1

Ich versuche, XML-Datei zu aktualisieren oder zu erstellen, wenn nicht vorhanden. Dann verwende ich den folgenden Code, um die Datei mit der PUT-Methode eines Dienstes zu senden.Wie kann man Roh-XML in RESTTemplate POST oder PUT-Methode übergeben, ohne es zu konvertieren?

public void importClusterProperties(RestManPropertyHolder propertyHolder,File file,String id) throws RestManServiceException { 
     testRestTemplate = new TestRestTemplate(propertyHolder.getSbusUserName(), propertyHolder.getSbusUserPassword()); 
     String sbusUrl = utils.prepareGatewayURI(propertyHolder); 
     try { 

       HttpHeaders requestHeaders = new HttpHeaders(); 
       List <MediaType> mediaTypeList = new ArrayList<MediaType>(); 
       mediaTypeList.add(MediaType.APPLICATION_ATOM_XML); 
       requestHeaders.setAccept(mediaTypeList); 
       requestHeaders.setContentType(MediaType.APPLICATION_ATOM_XML); 
       HttpEntity<String> requestEntity = new HttpEntity<String>(requestHeaders); 
        // Create the HTTP PUT request, 
      ResponseEntity<String> response = testRestTemplate.exchange(sbusUrl + "/clusterproperty?",HttpMethod.PUT, requestEntity,String.class); 
      if (null != response) { 
       System.out.println("RESPONSE::" + response.toString()); 
      } 
     } catch (RestClientException rce) { 
      System.out.println("REST EXCEPTION:::" + rce.getMessage()); 
     } 
    } 

Wie rohe XML-Datei in RestTemplate passieren, ohne es zuerst in ein Java-Objekt zu konvertieren?

enter image description here

Antwort

0

Datei konvertieren zu Byte-Array und es ByteArrayHttpMessageConverter mit schicken.

RestTemplate restTemplate = new RestTemplate(); 
// Add ByteArrayHttpMessageConverter if not present by default. 
restTemplate.getMessageConverters().add(
     new ByteArrayHttpMessageConverter()); 

String fileName = "path + file name"; 
// FileUtils is from Apache Commons IO 
// import org.apache.commons.io.FileUtils; 
byte[] requestBody = FileUtils.readFileToByteArray(new File(fileName)); 

HttpEntity<byte[]> requestEntity = new HttpEntity<byte[]>(requestBody , requestHeaders); 

// Create the HTTP PUT request, 
ResponseEntity<byte[]> response = 
    restTemplate.exchange("URL ...." , HttpMethod.PUT , 
     requestEntity , byte[].class); 
Verwandte Themen