来自 marklogic rest 端点的二进制数据

Binary data from marklogic rest endpoint

我有 marklogic 休息端点,它正在返回大量数据。截至目前,我正在使用 String 来获取该数据,但是有没有办法以二进制格式获取它?

如果您使用 MarkLogic 客户端 Java API 发出请求,您可以使用实现 BinaryReadHandle 接口的 类 之一来访问响应,包括

  • BytesHandle 获取内存中的二进制文件
  • InputStreamHandle 获取二进制文件作为输入流
  • FileHandle 将二进制文件直接写入文件

有关这些 类 的更多信息,请访问 BinaryReadHandle 中的链接:

http://docs.marklogic.com/javadoc/client/com/marklogic/client/io/marker/BinaryReadHandle.html

希望对您有所帮助,

MarkLogic 应该使用适当的 content-type header 发送数据,因此您应该能够使用任何适当的 reader.

使用它

我猜你说的是 Spring RestTemplate,我认为这更像是一个 Spring 问题,而不是 MarkLogic 问题。以下博客 post 似乎表明您可以使用 HttpMessageConverters 将 readers 连接为其他格式:

https://www.leveluplunch.com/java/tutorials/038-retrieve-file-spring-resttemplate/

大概可以归结为:

public RestTemplate() {
    this.messageConverters.add(new ByteArrayHttpMessageConverter());
    //...
}

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
messageConverters.add(new ByteArrayHttpMessageConverter());

RestTemplate restTemplate = new RestTemplate(messageConverters);

public void fetchFile() throws IOException {

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(
            new ByteArrayHttpMessageConverter());

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM));

    HttpEntity<String> entity = new HttpEntity<String>(headers);

    ResponseEntity<byte[]> response = restTemplate.exchange(
            "https://www.google.com/assets/images/srpr/logo11w.png",
            HttpMethod.GET, entity, byte[].class, "1");

    if (response.getStatusCode() == HttpStatus.OK) {
        // Do something with it..
    }
}

(未经测试,只是从博客复制到此处 posterity)

HTH!