来自marklogic rest终结点的二进制数据

时间:2018-08-02 14:09:59

标签: java rest spring-boot marklogic binary-data

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

希望有帮助,

答案 1 :(得分:0)

MarkLogic应该使用适当的内容类型标头发送数据,因此您应该能够使用任何适当的读取器使用它。

猜想您在谈论Spring RestTemplate,我认为这不是MarkLogic而是Spring的问题。以下博客文章似乎表明您可以使用HttpMessageConverters来连接其他格式的阅读器:

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..
    }
}

(未经测试,只是从博客复制到此处以供后代使用)

HTH!