2016-11-04 4 views
2

스프링 프레임 워크 나머지 템플릿 을 사용하여 바이트 배열을 가져오고 있지만이 바이트의 Mediatype도 가져와야합니다.바이트에 대한 스프링 REST 템플릿

이 bytearray의 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 콘텐츠 유형 만 가져옵니다.

다른 끝의 서비스가 byteArray에 임의의 MediaType을 제공하기 때문에 일반 MediaType을 허용하도록 contentType을 설정하는 방법.

누군가 MediaType을 가져올 수있는 방법을 제안 해주세요. 예를 들어, ResponseEntity.getHeaders() -

어떤 제안을 환영합니다 ..

답변

0

당신은 HTTP 헤더와 사용중인 용지 종류를 저장할 수 있습니다. 또는 바이트 배열과 미디어 유형을 홀더 클래스로 래핑 할 수 있습니다.

+0

감사합니다 응답에 대한 응답의 헤더에서 content-type 압축을 풉니 다. 그래, 이건 MediaType지만, acceptHeader에 설정된 하나만 줄 것이다.하지만 bytearray는 pdf 또는 jpg 또는 png 또는 txt 파일과 같은 것이 될 수있다 .. – Trin

0

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

+0

안녕하세요, Andy, Response에 감사드립니다. 예, MediaType을 제공하지만 acceptHeader에 설정된 파일 만 제공합니다.하지만 bytearray는 pdf 또는 jpg 또는 png 또는 txt 파일과 같은 형식이 될 수 있습니다 .. – Trin

+0

Accept 헤더에 설정된 파일이 아니며 서버가 파일을 설정합니다. 응답을 생성합니다. 서버가 바이트 배열이 나타내는 내용 (예 : pdf 파일의 경우 application/pdf)을 기반으로 MediaType을 설정하면 Content-Type 헤더를 그대로 사용할 수 있습니다. –

0

당신은 그냥 content-type 것을 반환하도록 서버를 강제하지 않도록 accept 헤더를 전송하지 here

1

에서 찾습니다 MediaTypeapplication/octet-stream으로 설정할 수 있습니다. 이것은 이후 와일드 카드를 */*

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

을 보내와 동일

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