티스토리 뷰

이미지 또는 파일을 리턴하고 싶을 때가 있다.


예를 들어 사용자가 http://도메인/api/images/1 같은 경로로 요청을 보냈을 때 이미지를 리턴하도록 만들어보자.

@ResponseBody

@ResponseBody 어노테이션을 사용함으로써 HTTP response body에 데이터를 그대로 담아서 전송할 수 있다. 이 어노테이션이 없다면 Spring은 View resolver를 통해 view 파일을 찾으려 할 것이다.

직렬화된(byte[]) 이미지나 파일을 리턴하기 위해 @ResponseBody 어노테이션을 Request Mapping 할 메소드에 붙이도록 하자.

@GetMapping("/get-text")
public @ResponseBody String getText() {
    return "Hello world";
}

@GetMapping의 produces 속성 설정

byte array로 파일이나 이미지를 리턴하면, 브라우저는 이것이 파일인지 이미지인지 알수가 없다. GetMapping의 produces 속성을 설정하면 브라우저가 응답이 어떤 내용인지 인식할 수 있다. png 이미지를 내보내고 싶다면 아래처럼 메서드를 작성하면 된다.

@GetMapping(
  value = "/get-image-with-media-type",
  produces = MediaType.IMAGE_JPEG_VALUE
)
public @ResponseBody byte[] getImageWithMediaType() throws IOException {
    InputStream in = getClass().getResourceAsStream("/com/baeldung/produceimage/image.jpg");
    return IOUtils.toByteArray(in);
}

IOUtils.toByteArray 메서드는 apache의 API이며 스트림의 내용을 직렬화한 뒤 반환한다. 


만약 JSON 데이터를 다루기 위해 Jackson 라이브러리를 사용한다면, produces 속성을 설정하지 않아도 List, Map 등의 컬렉션을 자동으로 JSON 문자열로 바꾸어 응답으로 내보낸다.

결과

위처럼 REST API로 이미지를 리턴하도록 만든 URL에 요청하여 아래 그림 1과 같은 결과가 나온다면 성공한 것이다.

[그림 1] 이미지 리턴



참고

http://www.baeldung.com/spring-controller-return-image-file

'프로그래밍 > Web' 카테고리의 다른 글

Maven 프로젝트 나눠서 관리하기  (0) 2019.03.05
Spring Error Page  (0) 2018.08.09
Spring controller에서 webapp 폴더 경로 찾기  (0) 2018.08.02
Spring MVC와 Dispatcher Servlet  (0) 2018.07.19
Spring JDBC  (0) 2018.07.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함