복붙노트

[SPRING] Spring MVC에서 동일한 @RequestMapping에있는 매개 변수에 대해 다른 값을 어떻게 매핑합니까?

SPRING

Spring MVC에서 동일한 @RequestMapping에있는 매개 변수에 대해 다른 값을 어떻게 매핑합니까?

내가 가지고 있다고 가정하자.

@RequestMapping(params = "action=nuovoprodotto")    
    public ModelAndView nuovoProdotto(
            @RequestParam(value = "page", required = false, defaultValue = "-1") int page,
            @RequestParam(value = "action") String action,
            @ModelAttribute Prodotto prod, HttpSession session)
            throws Exception {

이 요청을 "action"매개 변수의 두 개 또는 세 개의 값과 매핑 할 수 있습니까?

나는 여러 가지 방법을 시도했다.

@RequestMapping(params = "action=nuovoprodotto, action=salvaprodotto")  

또는

@RequestMapping(params = "action=nuovoprodotto|salvaprodotto")  

하지만 그들은 작동하지 않습니다 ... 만약 내가 솔루션을 수없는, 모든 단일 매개 변수의 값 조합에 대한 처리기를 작성 양면?

해결법

  1. ==============================

    1.이 시도:

    이 시도:

    @RequestMapping(params = {"action=nuovoprodotto","action=salvaprodotto"})
    

    params 속성은 실제로 String [] 유형이지만 주석을 사용하면 단일 요소 String [] 대신 String을 쓸 수 있으므로이 둘은 동일합니다.

    @RequestMapping(params = {"action=nuovoprodotto"})
    

    @RequestMapping(params = "action=nuovoprodotto")
    

    참고:

    업데이트 : 나쁘다. Advanced @RequestMapping 옵션 섹션에서 읽을 수 있듯이 and, or 또는 not를 사용하여 여러 매개 변수가 결합되므로 위에서 지정한대로 작동하지 않을 수 있습니다.

    그래서 당신이해야 할 일은 거의 같은 서명을 가진 별칭 메서드를 만드는 것입니다.

    @RequestMapping(params = "action=nuovoprodotto")    
    public ModelAndView nuovoProdotto(
            @RequestParam(value = "page", required = false, defaultValue = "-1") int page,
            @RequestParam(value = "action") String action,
            @ModelAttribute Prodotto prod, HttpSession session)
            throws Exception {
            // some stuff here
    }
    
    @RequestMapping(params = "action=salvaprodotto")    
    public ModelAndView salvaProdotto(
            @RequestParam(value = "page", required = false, defaultValue = "-1") int page,
            @RequestParam(value = "action") String action,
            @ModelAttribute Prodotto prod, HttpSession session)
            throws Exception {
    
            return nuovoProdotto(page, action, prod, session);
    }
    
  2. ==============================

    2.아니 지원되지 않습니다.

    아니 지원되지 않습니다.

    일을 할 수있는 한 가지 방법은 ServletAnnotationMappingUtils의 부울 checkParameters (String [] params, HttpServletRequest 요청)를 "오버라이드"하는 것입니다.

    불행히도 그것은 정적 메서드입니다! 따라서 두 메소드를 호출 한 위치에서 재정의해야합니다.

    AnnotationMethodHandler.RequestMappingInfo는 내부 클래스이며 AnnotationMethodHandler의 다른 내부 클래스 (ServletHandlerMethodResolver)에서 직접 생성됩니다. 그러나 이것도 무시하면 작업이 가능할 수 있습니다. 최소한 AnnotationMethodHandlerAdapter 클래스 전체를 복사하고 코드 줄을 변경해야합니다.

    요약하면 가장 쉬운 방법은 여전히 ​​두 개의 핸들러 메소드를 사용하는 것입니다.

  3. from https://stackoverflow.com/questions/4877250/how-do-i-map-different-values-for-a-parameter-in-the-same-requestmapping-in-spr by cc-by-sa and MIT license