来自 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!
我有 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!