'심심풀이땅콩'에 해당되는 글 1건

  1. 2010.01.29 @RequestMapping . 위치에 따라서 달라진다? (2)
봄싹2010. 1. 29. 03:36
간만에 스프링 이야기나 해볼까?

@RequestMapping를 달수 있는 곳은 2곳이다..

@RequestMapping("/abc/**")
public class Test{
...
}
이렇게 또는

@RequestMapping("/abc/**")
public void test(String id){
...
}

@RequestMapping(value="/abc/ab", method=RequestMethod.GET)
public void test(String id){
...
}

이렇게..
클래스 위와 메소드 위에..

그렇타면 둘의 큰차이는 멀까??
스프링3.0 최신 소스 기준으로.. AnnotationMethodHandlerAdapter.resolveHandlerMethod(468line) 이곳을 보면..
쉽게 이해 할수 있다..

간단하게 정리 하면 1번의 경우는 패턴에 해당하는 url 정보로 일단 비교해서 가지고 온다음에.. ex) /abc/test 요청..
일단 url과 value가 같은 메소드를 찾고 없으면... 요청의 메소드.(RequestMethod)를 비교해서 일치하는 메소드가 있다면 해당 handler를 실행하고...

2번의 경우는.. 넘어오는 url과... value로 준 값이 동일하게 일치해야지만.. 실행이 된다는 점이다.. (물론 메소드도 비교하지만..)

 결론은 1번의 경우 /abc/xxxx 앞에 abc에 해당하는 패턴에만 일치하고 .. 메소드만 같다면 ... 뒤에 xxx 와 일치하는 값이 없더라도 해당 handler를 실행시키고 2번의 경우는 모든것이 다 일치해야지만 실행된다는거..
알아야 하는 이유는 잘못 모르고 쓰다보면.. 자꾸 엉뚱한 놈이 실행된다던가.. 예상했던 handler가 실행되지 않아서 삽질할 수 잇따는거..

Posted by is윤군

댓글을 달아 주세요

  1. "/abc/xxxx 앞에 abc에 해당하는 패턴에만 일치하고 .. 메소드만 같다면 ... 뒤에 xxx 와 일치하는 값이 없더라도 해당 handler를 실행시키고"

    1번 클래스에 public void hi(Model model) 이라는 메소드가 있고, @RequestMapping(method="GET";) 일 때 GET 요청으로 /abc/hello URL을 요청하면 hi라는 메서드가 동작한다는 말이야?

    2010.01.29 13:52 [ ADDR : EDIT/ DEL : REPLY ]