티스토리 뷰

Skill/spring

@PostMapping의 consumes 속성

진열사랑 2025. 7. 19. 22:13

@PostMapping의 consumes 속성은 Spring MVC에서 해당 컨트롤러 메서드가 처리할 수 있는 Content-Type을 지정하는 역할을 합니다.
즉, 클라이언트가 요청을 보낼 때 Content-Type 헤더가 consumes에 지정된 타입과 정확히 일치하거나 호환되지 않으면, Spring은 이 요청을 해당 핸들러 메서드로 라우팅하지 않고, HTTP 415 Unsupported Media Type 오류를 발생시킵니다.


✅ consumes가 있을 때 Spring의 동작 흐름

1. 클라이언트 요청이 들어오면

  • 요청의 Content-Type 헤더를 확인합니다.

2. 해당 @RequestMapping 또는 @PostMapping의 consumes와 비교

  • 요청의 Content-Type과 consumes 속성의 값이 일치하거나 호환되면 → 해당 메서드 실행
  • 그렇지 않으면 → HttpMediaTypeNotSupportedException → 415 응답

✔ 예시:

@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadFile(@RequestParam("file") MultipartFile file) {
    // 파일 처리 로직
    return "ok";
}
  • 위 메서드는 오직 Content-Type: multipart/form-data 요청만 받습니다.
  • 만약 application/json 등의 Content-Type으로 요청하면 → 415 에러 발생

🧪 동작 예

요청 Content-Type consumes = multipart/form-data일 때 반응

multipart/form-data ✅ 허용됨
application/json ❌ 415 오류
없음 (Content-Type 생략) ❌ 415 오류
multipart/form-data; boundary=... ✅ 허용됨 (정상적인 multipart 요청)

📌 추가 설명

✴️ consumes를 생략하면?

  • consumes가 없으면, Spring은 모든 Content-Type을 허용하려고 시도하고,
  • 요청 본문(@RequestBody, @ModelAttribute, @RequestParam)의 타입과 HttpMessageConverter, MultipartResolver 등을 통해 적절한 변환을 시도합니다.

✴️ multipart/form-data를 처리하려면?

Spring이 다음 조건을 만족해야 합니다:

  • MultipartResolver 빈이 등록되어 있어야 함 (Spring Boot에서는 자동 설정됨)
  • multipart/form-data 요청은 일반적인 @RequestBody가 아닌 @RequestParam 또는 @ModelAttribute로 처리해야 함

✅ 요약

  • consumes는 "이 메서드는 이런 Content-Type의 요청만 받는다"는 의미
  • Content-Type이 consumes와 일치하지 않으면 415 Unsupported Media Type
  • multipart/form-data를 받으려면 Spring 내부에 MultipartResolver가 있어야 하고, @RequestParam이나 @ModelAttribute로 파라미터를 받아야 함

필요하다면 produces, headers와의 관계나 MultipartFile의 내부 동작도 설명드릴 수 있습니다.

'Skill > spring' 카테고리의 다른 글

Hikari booting 로그 보기  (2) 2025.08.12
@RequestPart  (1) 2025.07.19
PostgreSQL] 최대 동시 접속자 수를 초과  (0) 2025.07.18
A TupleBackedMap cannot be modified.  (1) 2025.07.18
JPA JOIN 처리  (1) 2025.07.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
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 31
글 보관함