嚴重: StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter] for bean with name 'org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#0' defined in class path resource [springmvc-context.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter] for bean with name 'org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#0' defined in class path resource [springmvc-context.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1745)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
原因是Spring 3.x 和4.X處理JSON的一個類不一樣,而這個東西又配置在xml文件中,所以編譯時又無法發現
spring3.x是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
spring4.x是org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
https://www.iteye.com/topic/1136145
1. <context:annotation-config/>隱式的向Spring 容器注冊
AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,
PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor這4 個BeanPostProcessor,解決了@Controller標識的類的bean的注入和使用。
2. <mvc:annotation-driven/>隱式注冊了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter兩個bean,配置一些messageconverter,解決了@Controller注解的使用前提配置。
第一條中的配置一般在配置包掃描路徑掃描之后將其移除,為什么呢:
<context:component-scan base-package="***.***"/> 該配置項其實也包含了自動注入上述"1"中四個bean processor的功能,因此當使用 <context:component-scan/> 后,就可以將 <context:annotation-config/>移除了。
你最后的疑問:不配置<mvc:annotation-driven/>,基本的訪問應該是沒問題,比如servlet mapping的配置是"*.do", ".do"這種請求可以被正確捕捉和處理,但是如果添加靜態資源訪問,你可能要將攔截改為"/",此時你再次訪問就會發現已經不能被正常攔截了,除非你加上<mvc:annotation-driven/>。<mvc:annotation- driven/>在初始化的時候會自動創建兩個對 象,org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter 和 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter