SPRING/스프링 MVC
HTTP 요청 맵핑하기 3부: 미디어 타입 맵핑
JUMP개발자
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());
}
}