프로그래밍/Spring Framework

RequestMappingHandlerMapping 관련

모지사바하 2013. 6. 28. 10:02

약 한달전에 RequestMappingHandlerMapping에 문제가 있어보인다는 포스팅을 했었고, http://javaiyagi.tistory.com/357

jira에 등록하였다. https://jira.springsource.org/browse/SPR-10574


그리고 KSUG 에도 올렸다.

https://groups.google.com/forum/#!topic/ksug/uSkVWfkvwkI




어제, 오늘 JIRA에 Phil과 Rossen이 답글을 달아주었다..


Phil Webb added a comment - 26/Jun/13 12:23 PM

It used to be the case that @Controller classes could be handled by the HandlerAdapter, with Spring 3.1 this is no longer true. You may be able to wrap your default handler in aorg.springframework.web.method.HandlerMethod so that RequestMappingHandlerAdapter will pick it up.

What does your homeController actually do?


Rossen Stoyanchev added a comment - 27/Jun/13 8:09 AM

It's not clear what your DefaultController looks like so I can only speculate that it is an annotated controller. In that case Phil is correct, you can't set the default handler to an annotated class. Either it has to be a HandlerMethod or you can use a non-annotated handler such as an implementation of HttpRequestHandler or Controller.

Rossen Stoyanchev added a comment - 27/Jun/13 8:09 AM

You could also map the @RequestMapping method to "/**".




defaultHandler 는 핸들러어댑터가 @Controller 클래스를 핸들링 하기 위해 사용된다. 그런데 Spring 3.1에선 그렇지 않다.

너는  RequestMappingHandlerAdapter 가 defaultHandler 를 처리하게 하기 위해서 HandlerMethod로 래핑 하게 할 수 있다.
너의 homeController는 실질적으로 뭐니?

로센너의 DefaultController 가 명확하지않다.  내가 추측하기론 annotated controller 인거같다(@Controller) . 그렇다면 Phil 이 맞다.

너는 @Controller annotated class 를 DefaultHandler 로 등록할 수 없다. 

HandlerMethod 또는 non annotated 여야 한다. 이미 언급했듯이 HttpRequestHandler 나 Controller 를 구현하여야한다.


또한, @RequestMapping(value="/**", RequestMethod.GET) 으로 해도 된다.


라고 해석을 했는데,, 영어실력이 짧아서 필이 남긴 댓글이 약간 헷갈린다...


어쨌든, 3.1에선 3.0 방식에서처럼은 하면 안된다는 거 같은데,,, 그렇다면 주석이 추가되거나

@Deprecated되어야 하는게 맞는건지, 아니면 어쨌든 쓸수는 있으니까 걍 놔두는게 맞는건지 좀 애매한듯하다..


하여 나도 댓글을 달았다..



bin choi added a comment - 27/Jun/13 5:25 PM

Thank you Phil and Rossen.
my DefaultController is @Controller annotated class.
but i wonder if spring 3.0 set DetaultHandler annotated class is work. but 3.1 is not work.(because spring 3.1 requestMappingHandlerAdaptor added HandlerMethod.)
then setDefaultHandler have to @Deprecated ?

because @RequestMapping(value="/**", method=RequestMethod.GET) is instead setDefaultHandler .

finally, i'm korean. so my english ability is very short. i'm sorry and thank you.



영어실력이 너무 짧아서.. 문법이 아마 하나도 안맞을것이다.... 그래도 의견 피력은 할 수 있을거같긴 한데..


내일 어떤 댓글이 달릴지 궁금하다..