Spring MVC 컨텐츠 타입 맵핑
Spring Web MVC
백기선님의 강의인 Spring Web MVC 강의를 듣고 공부한 내용을 정리한 글
특정한 타입의 데이터를 담고 있는 요청만 처리하는 핸들러
만약 특정한 컨텐츠 타입의 요청만 처리하고 싶은 경우 consumes 옵션을 주면 된다.
// 이 경우 오타가 생길 수 있음
@RequestMapping(consumes="application/json")
// 자바에서 지원하는 const 값을 사용
@RequestMapping(consumes=MediaType.APPLICATION_JSON_UTF8_VALUE)
이와 같은 요청이 오면 Content-Type 헤더로 필터링하게 된다.
MediaType.APPLICATION_JSON_UTF8_VALUE의 경우 “applicaiton/json; charset=UTF-8”의 문자열과 동일한데, 여기서 charset-UTF-8은 스펙은 아니고, 특정 브라우저에 인코딩을 지원하기 때문에 붙여서 보내는데 스프링에서는 charset을 포함해도 되고 안해도 처리 가능하다.
특정한 타입의 응답을 만드는 핸들러
@RequestMapping(produces="application/json")
Accept 헤더로 필터링되는데 Accep 헤더가 존재하지 않는 경우라도 처리해준다.
그러나 매치 되지 않는 경우라면 406 Not Supported로 응답한다.
문자열 대신 Media Type을 사용하면 상수를 자동완성으로 사용할 수 있다. (추천)
클래스에 선언한 consumes나 produces를 설정하고 메소드에도 설정하면 어떻게 될까?
메소드의 설정이 클래스의 설정을 Overriding한다. 즉 클래스의 설정이 무시되기 때문에 이 부분 유의하자.
Reference
인프런 백기선님의 스프링 Web MVC