【问题标题】:Spring REST Template for Byte字节的 Spring REST 模板
【发布时间】:2017-03-18 13:06:13
【问题描述】:

我正在使用 spring 框架休息模板获取字节数组, 但是我还需要获取这个字节的Mediatype。

这个字节数组的 mediaType 可以是任意类型。

现在用于获取字节的代码如下。

   HttpHeaders headers = new HttpHeaders();
   headers.setAccept(Collections.singletonList(MediaType.valueOf("application/pdf")));
   ResponseEntity<byte[]> result = restTemp.exchange(url, HttpMethod.GET, entity, byte[].class,documentId);

以上代码将只获取 pdf 内容类型。

如何设置 contentType 以接受任何通用 MediaType,因为另一端的服务正在为 byteArray 提供任何随机 MediaType。

有人可以建议如何获取 MediaType。

欢迎任何建议..

【问题讨论】:

    标签: java spring cxf spring-rest


    【解决方案1】:

    只是不发送accept 标头以不强制服务器返回content-type。这和发送通配符*/*是一样的

    //HttpHeaders headers = new HttpHeaders();
    //headers.setAccept(Collections.singletonList(MediaType.WILDCARD));
    ResponseEntity<byte[]> result = restTemp.exchange(url, HttpMethod.GET, entity, byte[].class,documentId);
    

    在此之后,从响应的标头中提取content-type

     byte body[] = result.getBody();
     MediaType contentType = result.getHeaders().getContentType();
    

    【讨论】:

      【解决方案2】:

      你可以把MediaType设置成application/octet-stream,看看here

      【讨论】:

        【解决方案3】:

        MediaType mediaType = result.getHeaders().getContentType();

        【讨论】:

        • 嗨,安迪,感谢您的回复。是的,这会给我MediaType,但只有acceptHeader中的一个。但是bytearray可以是pdf或jpg或png或txt文件之类的任何东西..
        • 这不是accept header中设置的,它是服务器在创建响应时设置的。如果服务器根据字节数组表示的内容设置 MediaType(例如 pdf 文件的 application/pdf),那么您可以使用 Content-Type 标头。
        【解决方案4】:

        您可以在 HTTP 标头中存储媒体类型并使用 - 例如,ResponseEntity.getHeaders()。或者您可以将字节数组和媒体类型包装到持有者类中。

        【讨论】:

        • 感谢您的回复。是的,这会给我MediaType,但只有acceptHeader中的一个。但是bytearray可以是pdf或jpg或png或txt文件之类的任何东西..
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多