ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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());
        }
    
    
    }
    
Designed by Tistory.