-
HTTP 요청 맵핑하기 3부: 미디어 타입 맵핑SPRING/스프링 MVC 2021. 6. 26. 22:20
특정한 타입의 데이터를 담고 있는 요청만 처리하는 핸들러
- @RequestMapping(consumes=MediaType.APPLICATION_JSON_UTF8_VALUE)
- Content-Type 헤더로 필터링
- 매치 되는 않는 경우에 415 Unsupported Media Type 응답
특정한 타입의 응답을 만드는 핸들러
- @RequestMapping(produces=”application/json”)
- Accept 헤더로 필터링
(Accept Type 헤더에 아무 것도 없는 경우에는 produces에 어떤 타입을 맵핑하더라도 정상 동작)
- 매치 되지 않는 경우에 406 Not Acceptable 응답
@Controller @RequestMapping(consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) // 위와 같이 Controller에 consumes이 맵핑되어 있고, 메서드에도 맵핑되어 있는경우에는 // 메서드에 되어 있는 맵핑이 우선시 된다. public class SampleController3 { /* consumes = MediaType.APPLICATION_JSON_UTF8_VALUE -> Content-Type 담긴 데이터가 JSON 타입일 경우 * produces = MediaType.TEXT_PLAIN_VALUE -> Response Type이 TEXT 타입일 경우에 return */ @RequestMapping(value="/hello3", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public String hello() { return "hello"; } }
아래와 같이 accept Type을 JSON으로 설정하고 테스트를 실행할때는 406 에러가 발생한다.
@RunWith(SpringRunner.class) @WebMvcTest public class SampleControllerTest { @Autowired MockMvc mockMvc; @Test public void helloTest2() throws Exception { mockMvc.perform(get("/hello3") .contentType(MediaType.APPLICATION_JSON_UTF8) .accept(MediaType.APPLICATION_JSON)) .andDo(print()) .andExpect(status().isOk()); } }
'SPRING > 스프링 MVC' 카테고리의 다른 글
요청 맵핑하기 6부 커스텀 애노테이션 (0) 2021.06.27 HTTP 요청 맵핑하기 4부: 헤더와 매개변수 (0) 2021.06.26 HTTP 요청 맵핑하기 2부: URI 패턴 맵핑 (0) 2021.06.20 요청 맵핑하기 1부 : HTTP METHOD (0) 2021.06.20 기타 WebMvcConfigurer 설정 (0) 2021.06.19