ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 핸들러 메소드 2부: URI 패턴
    SPRING/스프링 MVC 2021. 6. 27. 23:46

    @PathVariable 

    - 요청 URI 패턴의 일부를 핸들러 메소드 아규먼트로 받는 방법. 

    - 타입 변환 지원. 

    - (기본)값이 반드시 있어야 한다. 

    - Optional 지원 : @PathVariable(require = false)

     

    @MatrixVariable 

    - 요청 URI 패턴에서 키/값 쌍의 데이터를 메소드 아규먼트로 받는 방법 

    - 타입 변환 지원. 

    - (기본)값이 반드시 있어야 한다. 

    - Optional 지원. 

    - 이 기능은 기본적으로 비활성화 되어 있음. 활성화 하려면 다음과 같이 설정해야 함

     

    @Controller
    public class SampleController {
    
        @GetMapping("/events/{id}")
        @ResponseBody
        public Event getEvent(@PathVariable(required = false) Integer id) {
            Event event = new Event();
            event.setId(id);
    
            return event;
        }
    
        @GetMapping("/events2/{id}")
        @ResponseBody
        public Event getEvent2(@PathVariable Integer id, @MatrixVariable String name) {
            Event event = new Event();
            event.setId(id);
            event.setName(name);
            System.out.println("event id : " + id + " event name : " + name);
            return event;
        }
    }
    

    @MatrixVariable을 사용하기 위해서는 아래와 같이 URL에서 세미콜론(;)을 사용할 수 있도록 설정을 해야한다.

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
    
        @Override
        public void configurePathMatch(PathMatchConfigurer configurer) {
            UrlPathHelper urlPathHelper = new UrlPathHelper();
            // URL에 있는 세미콜론(;)을 제거하지 않도록 false로 변경
            urlPathHelper.setRemoveSemicolonContent(false);
            configurer.setUrlPathHelper(urlPathHelper);
        }
    
    }
    

     

     

     

    테스트 케이스 및 URL

    @RunWith(SpringRunner.class)
    @WebMvcTest
    public class Hm2Test {
    
        @Autowired
        MockMvc mockMvc;
    
        @Test
        public void getEvents() throws Exception {
            mockMvc.perform(get("/events/1"))
                    .andDo(print())
                    .andExpect(status().isOk())
                    .andExpect(jsonPath("id").value(1));
        }
    
        @Test
        public void getEvents2() throws Exception {
            mockMvc.perform(get("/events2/1;name=jump"))
                    .andDo(print())
                    .andExpect(status().isOk())
                    .andExpect(jsonPath("id").value(1));
        }
    }
    

     

Designed by Tistory.