如何将原始XML传递给RESTTemplate POST或PUT方法而不进行转换?

时间:2016-03-25 16:22:28

标签: java resttemplate

我正在尝试更新或创建xml文件(如果不存在)。然后我使用下面的代码使用服务的PUT方法发送文件。

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());
        }
    }

如何将原始xml文件传递给RestTemplate而不先将其转换为java对象?

enter image description here

1 个答案:

答案 0 :(得分:0)

将文件转换为字节数组并使用ByteArrayHttpMessageConverter发送。

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);