봄싹2009. 6. 23. 23:49
예시로 ..

@Controller
@RequestMapping(value={"/xxxx/*.do"})
public class TestController {
@RequestMapping(method = RequestMethod.GET)
    public String add(){
        return "abc";
    }
@RequestMapping(method = RequestMethod.GET)
    public String rule(){
        return "bce";
    }

@RequestMapping(method = RequestMethod.POST)
    public String del(){
        return "bce";
    }
}


만약 이런 컨트럴러가 있다고 치면...

그냥 주소창에서 (GET 방식.. )
http://helols.pe.kr/xxxxx/del.do
를 치게 되면... 어느 메소드가 실행이 될까;;

아마도 add 실행이 될듯;; 그런되 왜 그럴까 !!
못찾는게 정상이 아닌가..ㅡㅡ?

이유는 알바끝나고 찾아봐야 될다!!

2010-07-12  걍 업데이트 함.

클래스에 애노테이션을 달면.. AnnotationMethodHandlerAdapter.resolveHandlerMethod(468line) 을 보시면.. 
해당 handlerMethod 메소드를 찾아서 url과 일치 하는 메소드를 찾는 부분인데요 ... 
해당 컨트럴러에 .. 메소드에 path 정보가 없기때문에.. 
그냥 메소드(GET/POST...) 이것이 일치한 값만 찾아서 ... 메소드를 선택하구요 .. 

두번째 처럼 메소드에 @RequestMapping 달구 value 까지 준것은... 
해당 value 값과... 넘어온 urlpath랑 비교해서 실행할 컨트럴러 메소드를 찾는데.. 


언젠가.. KSUG에 답변했던게 기억이 나서.. 가져다가 붙이기..!!

클래스에.. 애노테이션 달고.. GET 메소드 하나만 있어도 .. 해당 모든 요청은 에러는 안나는 그런 형태;;
이번 JCO 발표를 들었던 분이라면.. @.@ 아실듯..!!
Posted by is윤군

댓글을 달아 주세요

  1. 바보

    답이 몬데????ㅋㅋ

    2009.07.02 09:31 [ ADDR : EDIT/ DEL : REPLY ]
  2. 으이그

    답이 뭐냐구-_-;;

    2010.05.25 16:34 [ ADDR : EDIT/ DEL : REPLY ]
  3. 답은!!!
    @RequestMapping 가 class 에 붙어 있는것 부터 찾으니까!!
    GET 으로 일치하는 add 가 먼져!

    class 에 붙은건 그냥 method(GET/POST .... ) 이런것만 가지고 매칭 시켜서 그런것!!

    AnnotationMethodHandlerAdapter 이부분 보면 될듯!!

    긴가민가;;

    2010.05.25 18:35 신고 [ ADDR : EDIT/ DEL : REPLY ]