스프링 MVC 활용(6) : HTTP 요청 맵핑하기 5부 - HEAD와 OPTIONS

de_sj_awa·2021년 7월 3일
0

6. HTTP 요청 맵핑하기 5부 - HEAD와 OPTIONS

우리가 구현하지 않아도 스프링 웹 MVC에서 자동으로 처리하는 HTTP Method

  • HEAD
  • OPTIONS

HEAD

  • GET 요청과 동일하지만 응답 본문을 받아오지 않고 응답 헤더만 받아온다.
@Controller
public class SampleController {

    @GetMapping("/hello", params = "name=spring")
    @ResponseBody
    public String hello(){
        return "hello";
    }
}
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {

    @Autowired
    MockMvc mockMvc;
	
    @Test
    public void helloTest() throws Exception{
        mockMvc.perform(head("/hello")
               .param("name", "spring"))
               .andDo(print())
               .andExpect(status().isOk());
    }
}

OPTIONS

  • 사용할 수 있는 HTTP Method 제공
  • 서버 또는 특정 리소스가 제공하는 기능을 확인할 수 있다.
  • 서버는 Allow 응답 헤더에 사용할 수 있는 HTTP Method 목록을 제공해야 한다.
@Controller
public class SampleController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello(){
        return "hello";
    }
    
    @PostMapping("/hello")
    @ResponseBody
    public String helloPost(){
        return "hello";
    }
}
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {

    @Autowired
    MockMvc mockMvc;
	
    @Test
    public void helloTest() throws Exception{
        mockMvc.perform(options("/hello"))
               .andDo(print())
               .andExpect(status().isOk());
    }
}

응답 Allow 헤더에 "GET, HEAD POST, OPTIONS"가 나온다.

테스트할 때 특정한 응답 헤더가 있는지 확인하고 싶으면 다음과 같이 한다.

@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {

    @Autowired
    MockMvc mockMvc;
	
    @Test
    public void helloTest() throws Exception{
        mockMvc.perform(options("/hello"))
               .andDo(print())
               .andExpect(status().isOk())
               .andExpect(header().exists(HttpHeaders.ALLOW));
    }
}

응답 헤더의 값을 보고 싶으면 다음과 같이 작성한다.

@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {

    @Autowired
    MockMvc mockMvc;
	
    @Test
    public void helloTest() throws Exception{
        mockMvc.perform(options("/hello"))
               .andDo(print())
               .andExpect(status().isOk())
               .andExpect(header().stringValues(HttpHeaders.ALLOW, hasItems(
                        containsString("GET"),
                        containsString("POST"),
                        containsString("HEAD"),
                        containsString("OPTIONS")
                )));
    }
}

참고

profile
이것저것 관심많은 개발자.

0개의 댓글