2010-09-12 9 views
15

अब तक, <mvc:annotation-driven /> ने मेरे लिए बहुत सारी परेशानी पैदा की है, इसलिए मैं इससे छुटकारा पाना चाहता हूं। हालांकि spring framework docs clearly say what it is supposed to be doing, टैग की एक सूची वास्तव में सारांश <mvc:annotation-driven /> की कमी है। कोई मैपिंग में यूआरआई [/ webapp/प्रशिक्षुओं] के साथ HTTP अनुरोध के लिए मिला DispatcherServlet -कैसे <mvc: एनोटेशन-संचालित /> से छुटकारा पाएं?

तो मैं <mvc:annotation-driven /> को दूर करने और अब हो रही त्रुटि

चेतावनी osweb.servlet.PageNotFound साथ अटक कर रहा हूँ नाम 'workoutsensor'

नियंत्रक वर्गों (: ./trainees इस मामले में) द्वारा हल किया जा करने की अपेक्षा की सभी URL के लिए

साथ। कोई सुझाव जहां मैं <mvc:annotation-driven /> के बारे में अधिक पढ़ सकता हूं? मैं बेहद जानना चाहता हूं कि <mvc:annotation-driven /> द्वारा वास्तव में कौन से टैग का प्रतिनिधित्व किया जाता है।

उत्तर

26

<mvc:annotation-driven /> द्वारा परिभाषित प्रत्येक बीन को अनुकूलित करने के लिए आप BeanPostProcessor का उपयोग कर सकते हैं। जावाडॉक्स अब सभी बीन्स टैग रजिस्ट्रार का विवरण देता है।

आप वास्तव में इसे से छुटकारा पाने के लिए चाहते हैं, तो आप org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser

के स्रोत कोड देख सकते हैं और आप देख सकते हैं जो सेम परिभाषित किया गया है। मैं इस 'व्यायाम' किया है (उनमें से सभी के लिए, लेकिन उन मैं जरूरत के लिए), इसलिए यहाँ वे हैं:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" /> 

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
     <property name="webBindingInitializer"> 
      <bean class="com.yourpackage.web.util.CommonWebBindingInitializer" /> 
     </property> 
     <property name="messageConverters"> 
      <list> 
       <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
       <bean class="org.springframework.http.converter.ResourceHttpMessageConverter" /> 
       <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> 
       <bean class="org.springframework.http.converter.feed.AtomFeedHttpMessageConverter" /> 
       <bean class="org.springframework.http.converter.feed.RssChannelHttpMessageConverter" /> 
       <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> 
       <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> 
       <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" /> 
       <!-- bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /--> 
      </list> 
     </property> 
    </bean> 
<bean id="handlerMapping" 
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 

अब, ऊपर आप CommonWebBindingInitializer देखते हैं। रूपांतरण और सत्यापन का उपयोग करने के लिए आपको इस वर्ग को बनाना होगा:

public class CommonWebBindingInitializer implements WebBindingInitializer { 

    @Autowired 
    private Validator validator; 

    @Autowired 
    private ConversionService conversionService; 

    @Override 
    public void initBinder(WebDataBinder binder, WebRequest request) { 
     binder.setValidator(validator); 
     binder.setConversionService(conversionService); 
    } 

} 

और यह अब तक मेरे लिए ठीक काम करता है। इसके साथ किसी भी समस्या की रिपोर्ट करने के लिए स्वतंत्र महसूस करें।

+0

धन्यवाद बोझो, यह केवल इनपुट है जो मुझे चाहिए। मुझे पूरा यकीन है कि मैं आगे की कॉन्फ़िगरेशन समस्याओं में भाग लेगा, विशेष रूप से, को लागू करना। मैं उन्हें रिपोर्ट करने में संकोच नहीं करूंगा ;-) –

+1

आह, फिशिए लिंक मैं देख रहा था। :] – earldouglas

+1

बीटीडब्ल्यू 'एनोटेशनड्रिवनबीनडिफिनिशन पार्सर स्रोत भी गिटहब पर देखा जा सकता है: https://github.com/cbeams/spring-framework/blob/master/org.springframework.web.servlet/src/main/java/org/springframework /web/servlet/config/AnnotationDrivenBeanDefinitionParser.java –

5

आप mvc:annotation-driven टैग से बचना चाहते हैं, तो आप बस DefaultAnnotationHandlerMapping और AnnotationMethodHandlerAdapter सेम खुद बना सकते हैं, लेकिन यह लग रहा है जैसे कि यह बेहतर होगा टैग के साथ ही अपनी परेशानियों की जड़ को पाने के लिए।

आपकी समस्या के लक्षण क्या हैं? आप अपने स्प्रिंग एमवीसी एप्लिकेशन के साथ क्या करने की कोशिश कर रहे हैं?

यदि आप जानना चाहते हैं कि जब आप एमवीसी का उपयोग करते हैं तो कवर के तहत क्या हो रहा है: एनोटेशन-संचालित, AnnotationDrivenBeanDefinitionParser.parse() विधि देखें।

+1

"आपकी समस्या के लक्षण क्या हैं?" - ओ, यह बस है कि जब भी मैं एक वसंत सुरक्षा इंटरफ़ेस को अनुकूलित करता हूं (उदा। UserDetailsManager) मुझे "डबल परिभाषित" त्रुटि मिलती है।या जब मैं अपने स्वयं के पहलुओं को आजमाता और परिभाषित करता हूं, तो मेरा कभी नहीं पढ़ता है क्योंकि वसंत स्वयं का उपयोग करता है। इसके अलावा, मैं बेहतर हूं कि मैं जो कोड करता हूं उस पर कुछ और नियंत्रण हो। कन्वेंशन-ओवर-कॉन्फ़िगरेशन एक अच्छी बात है ... यदि आप जानते हैं कि सम्मेलन क्या है ;-) –

3

पुराना सवाल मुझे पता है, लेकिन यह किसी की मदद कर सकता है। इस पृष्ठ पर पोस्ट करने के लिए धन्यवाद और over here, मैंने Roo 1.2 ऐप में एनोटेशन-संचालित टैग को प्रतिस्थापित करने के लिए निम्न का उपयोग किया है। वे मेरे लिए किकर आरयू ऐप सूची दृश्य में समर्थन प्रकार रूपांतरण की आवश्यकता थी।

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" /> 

<bean id="conversionServiceExposingInterceptor" 
    class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor"> 
    <constructor-arg ref="conversionService" /> 
</bean> 

<bean 
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> 
    <property name="order" value="0" /> 
    <property name="interceptors"> 
     <list> 
      <ref bean="conversionServiceExposingInterceptor" /> 
     </list> 
    </property> 
</bean> 

<bean 
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <bean 
      class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
      <property name="conversionService" ref="conversionService" /> 
      <property name="validator" ref="validator" /> 
     </bean> 
    </property> 
    <property name="messageConverters"> 
     <list> 
      <bean 
       class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
      <bean 
       class="org.springframework.http.converter.StringHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> 
      <bean 
       class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> 
     </list> 
    </property> 
</bean> 
+0

स्प्रिंग 3.1 ने [नए समर्थन वर्ग] पेश किए [http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html# mvc-ann-requestmapping-31-vs-30) @RequestMapping के लिए जिसका उपयोग "नए स्प्रिंग एमवीसी 3.1 सुविधाओं का लाभ उठाने के लिए" किया जाना चाहिए। इस उदाहरण को अद्यतन किया है। – sbk

2

ओवरराइड करते समय, कस्टम निष्पादन प्रबंधन ओवरराइडिंग पर विचार करने के लिए सावधान रहें। अन्यथा, आपके सभी कस्टम अपवाद मैपिंग असफल हो जाएंगे। आपको एक सूची बीन के साथ संदेश क्वॉर्टर का पुन: उपयोग करना होगा:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" /> 

<util:list id="messageConverters"> 
    <bean class="your.custom.message.converter.IfAny"></bean> 
    <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean> 
    <bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean> 
    <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean> 
    <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean> 
    <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean> 
    <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean> 
    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean> 
</util:list> 

<bean name="exceptionHandlerExceptionResolver" 
     class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver"> 
    <property name="order" value="0"/> 
    <property name="messageConverters" ref="messageConverters"/> 
</bean> 

<bean name="handlerAdapter" 
     class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
      <property name="conversionService" ref="conversionService" /> 
      <property name="validator" ref="validator" /> 
     </bean> 
    </property> 
    <property name="messageConverters" ref="messageConverters"/> 
</bean> 

<bean id="handlerMapping" 
     class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> 
</bean> 
संबंधित मुद्दे