복붙노트

[SPRING] 애매한 URL, 하나는 PathVariable

SPRING

애매한 URL, 하나는 PathVariable

나는 봄 3.2 웹 애플 리케이션과 나는 다음과 같은 요청 매핑과 컨트롤러가 :

@RequestMapping(value = "/test/{param1}", method = RequestMethod.GET)
public String method1(@PathVariable(value = "param1") String param1, ..

@RequestMapping(value = "/test/login", method = RequestMethod.GET)
public String method2(//..

누군가가 url / test / login을 요청하면 method2가 호출 될 수 있습니까? 봄이 그것을 처리하는 방법을 결정하는 데 어떤 요소가 있습니까? PathVariable없이 URL을 항상 선택합니까? 나는 봄의 문서에서 아무것도 찾을 수 없다.

해결법

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

    1.누군가가 url / test / login을 요청하면 method2가 호출된다는 것을 확신 할 수 있습니까? 예.

    누군가가 url / test / login을 요청하면 method2가 호출된다는 것을 확신 할 수 있습니까? 예.

    매핑은 특이성에 의해 해결되며 관련 문서는 여기에서 볼 수 있습니다.

    두 매핑이 요청과 일치하면 더 구체적인 사항이 적용됩니다. 두 매핑 중 / test / login이 더 구체적입니다.

  2. ==============================

    2.예상되는 대답이 아닌 것 같지만 문서에 명시되지 않았기 때문에 정의되지 않은 것으로 간주해야합니다.

    예상되는 대답이 아닌 것 같지만 문서에 명시되지 않았기 때문에 정의되지 않은 것으로 간주해야합니다.

    시도해 볼 수는 있지만 (결국 소스 파일 인 경우 "/ test / logging"메서드를 사용하는 것이 좋습니다), 작동하더라도 여전히 다른 버전의 스프링 프레임 워크에서 작동한다는 것을 확신 할 수 없습니다.

    내 충고는 다음과 같습니다. 가능한 경우 모호한 URL을 피하십시오. 가능하지 않은 경우 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?

    @RequestMapping(value = "/test/{param1}", method = RequestMethod.GET)
    public String method0(@PathVariable(value = "param1") String param1, ...
        ) { // union of all parameters for both method1 and method2
        String ret;
        if ("login".equals(param1)) {
            ret = method2(/* pass parameters for method 2 */ ...);
        }
        else {
            ret = method1(/* params for method1 */ param1, ...);
        }
        return ret;
    }
    
    public String method1(String param1, ..
    
    public String method2(//..
    

    그렇게하면 어떤 메소드가 URL을 처리 하는지를 완벽하게 제어 할 수 있습니다. 꼭 가장 좋은 방법은 아니지만 최소한 강력합니다 ...

  3. from https://stackoverflow.com/questions/31746208/ambiguous-urls-one-with-pathvariable by cc-by-sa and MIT license