Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自marklogic rest端点的二进制数据_Java_Rest_Spring Boot_Marklogic_Binary Data - Fatal编程技术网

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

Java 来自marklogic rest端点的二进制数据,java,rest,spring-boot,marklogic,binary-data,Java,Rest,Spring Boot,Marklogic,Binary Data,我有MarkLogicREST端点,它返回大量数据。到目前为止,我正在使用String获取数据,但是有没有办法以二进制格式获取数据?如果您使用MarkLogic客户端Java API发出请求,您可以使用实现BinaryReadHandle接口的类之一访问响应,包括 BytesHandle获取内存中的二进制文件 InputStreamHandle以获取二进制文件作为输入流 FileHandle将二进制文件直接写入文件 有关这些类的详细信息,请遵循BinaryReadHandle中的链接: 希

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

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

  • BytesHandle获取内存中的二进制文件
  • InputStreamHandle以获取二进制文件作为输入流
  • FileHandle将二进制文件直接写入文件
有关这些类的详细信息,请遵循BinaryReadHandle中的链接:


希望这能有所帮助,

MarkLogic应该使用适当的内容类型头发送数据,这样您就可以使用任何适当的读取器来使用它

我猜你在谈论SpringRESTTemplate,我认为这更像是一个Spring问题,而不是MarkLogic问题。以下博文似乎表明您可以使用HttpMessageConverters连接其他格式的阅读器:

大概可以归结为:

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

List>();
添加(新的bytearrayhtpmessageconverter());
RestTemplate RestTemplate=新的RestTemplate(messageConverters);

public void fetchFile()引发IOException{
RestTemplate RestTemplate=新RestTemplate();
restTemplate.getMessageConverters().add(
新的ByteArrayHttpMessageConverter());
HttpHeaders=新的HttpHeaders();
setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM));
HttpEntity=新的HttpEntity(标题);
ResponseEntity response=restemplate.exchange(
"https://www.google.com/assets/images/srpr/logo11w.png",
HttpMethod.GET,实体,字节[]。类,“1”);
if(response.getStatusCode()==HttpStatus.OK){
//用它做点什么。。
}
}
(未经测试,仅从博客复制到此处供后人使用)


谢谢,但我使用的是marklogic rest端点,所以我使用的是rest模板。您使用的是什么rest模板?为了澄清,MarkLogic客户端Java API在MarkLogic REST API上执行请求。同意“客户端Java API在MarkLogic REST API上执行请求”,除此之外,我们可以直接从MarkLogic公开自定义REST端点。
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..
    }
}