2012-02-09 5 views
9

Spring MVC 3에서는 url 매개 변수의 값에 따라 두 개의 다른 컨트롤러 클래스로 동일한 URL을 처리하려고합니다. @RequestMapping 주석도 같은 필드가 있습니다 PARAMS을, 나는 두 개의 서로 다른 매핑 될 것이다 다음 생각했다 (I 클래스 수준에 매핑을 사용) :매개 변수 값으로 Spring MVC 요청 매핑을 분할하는 방법

@RequestMapping(value = "/myurl", params = "name=val1") 

@RequestMapping(value = "/myurl", params = "name=val2") 

을하지만 그렇지 않아 . /myurl에 대한 컨트롤러가 이미 매핑 된 두 번째 경우 (첫 번째 경우)에 대해 Spring에서 예외가 발생합니다.

매개 변수별로 요청 매핑을 분할하는 정확한 해결책이 있습니까? @RequestMapping을 확장하거나 컨트롤러를 프록시로 사용하고 매개 변수에 따라 다른 컨트롤러를 호출 할 수 있습니다 ... 의견이 있으십니까?

이없는 클래스 수준에 불과 방법의 수준에 있지만 작동 UPDATE ... 이 뜻 :

@Controller 
@RequestMapping(value = "/myurl") 
public class Class123 { 

    @RequestMapping(value = {"edit.htm"}, params = "src=1") 
    public String open1(Map<String, Object> map) throws Exception {....} 

    @RequestMapping(value = {"edit.htm"}, params = "src=2") 
    public String open2(Map<String, Object> map) throws Exception {....} 
} 

이되지 않습니다 내가 좋아하는 것

@Controller 
@RequestMapping(value = "/myurl", params = "src=1") 
public class Class123_1 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 


@Controller 
@RequestMapping(value = "/myurl", params = "src=2") 
public class Class123_2 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 

그리고 다른 클래스의 논리를 분할하는 것.

+1

그래야합니다. 나는 그것을 사용했습니다. 네가 우리를 보여주지 않았다는 다른 일이 벌어지고있다. 아마도 다른 컨트롤러가 해당 URL을 매핑 한 것일 수 있습니다. – skaffman

+0

+1 더 많은 정보를 얻을 수 있습니까? –

+1

흠, 이것은 같은 클래스의 메서드에서만 작동 할 수 있습니다. 문서에 언급되지 않았지만 버그인지 아닌지는 확실하지 않습니다. 어쩌면 한 클래스에서 메소드를 유지할 수 있지만 다른 클래스에 위임하여 구현을 개별적으로 유지할 수 있습니까? – skaffman

답변

1

RequestMappingHandlerMapping (Spring 3.1의 새로운 기능)과 DefaultAnnotationHandlerMapping (RequestMappingHandlerMapping으로 대체 된 클래스)을 사용하는 것과 비슷한 점이 들립니다.

관련 문제