해결된 질문
작성
·
494
2
https://www.baeldung.com/spring-mvc-image-media-data
이거보면서 다시 복습하고 있었는데요
@RequestMapping(value = "/image-byte-array", method = RequestMethod.GET)
public @ResponseBody byte[] getImageAsByteArray() throws IOException {
InputStream in = servletContext.getResourceAsStream("/WEB-INF/images/image-example.jpg");
return IOUtils.toByteArray(in);
};
@RequestMapping(value = "/image-byte-array", method = RequestMethod.GET)
@ResponseBody
public byte[] getImageAsByteArrayV2() throws IOException {
InputStream in = servletContext.getResourceAsStream("/WEB-INF/images/image-example.jpg");
return IOUtils.toByteArray(in);
}
이렇게 반환타입 옆에 어노테이션이 붙어있더라구요
위랑 아래랑 같은 코드가 맞죠 ?
그런데 위 처럼 작성하는 이유가 있을까요 ?
답변 1
3
안녕하세요. yousd179님, 공식 서포터즈 OMG입니다.
.
어노테이션이 적용되는 위치는 다양합니다.
클래스에 적용할 수도, 메서드에도 (+그 외 다양한 위치에) 적용할 수 있습니다.
@ResponseBody의 Target은 TYPE과 METHOD가 허용되기 때문에 메서드 영역과 클래스 영역에 선언이 될 수 있습니다. (올리신 코드 예시는 ElementType.METHOD로 인해 위치 허용이 되었습니다.)
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseBody {
}
올리신 코드에서 @ResponseBody위치로 인한 둘의 동작차이는 없을 것이고, 코딩 스타일 차이라 생각합니다.
.
감사합니다.
주말에도 상세한 답변 감사합니다 !!!