2016-05-22 4 views
1

Ich erhalte den folgenden Fehler, wenn ich Anfrage an RestController übergeben. HierSpring Framework XmlBeanDefinitionStoreException: Das Präfix "Beans" für Element "Bohnen: Bohne" ist nicht gebunden

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 22 in XML document from ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 22; columnNumber: 108; The prefix "beans" for element "beans:bean" is not bound.

org.xml.sax.SAXParseException; lineNumber: 22; columnNumber: 108; The prefix "beans" for element "beans:bean" is not bound.

ist die Steuerung:

@RestController 
public class smsController { 

    @RequestMapping(value = "/sendSMS", method = RequestMethod.POST) 
    public void sendMessage(@RequestBody MessageBean msgBean) throws UnsupportedEncodingException { 

     String numbers = msgBean.getNumbers();  
     String message = msgBean.getMessages(); 
    } 
} 

Und dispatcher-servlet xml:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:component-scan base-package="com.spring.rest.controllers" /> 
    <mvc:annotation-driven /> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 

    <beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
     <beans:property name="messageConverters"> 
      <beans:list> 
       <beans:ref bean="jsonMessageConverter"/> 
      </beans:list> 
     </beans:property> 
    </beans:bean> 
</beans> 

Gläser auf dem Classpath:

jackson-annotations-2.3.2.jar 
jackson-databind-2.3.2.jar 
jackson-core-2.3.2.jar 

Ich bin nicht sicher, was das Problem verursacht . Wenn ich neue Gläser jackson 2.7.4 verwenden, erhalte ich einen anderen Fehler:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonTypeInfo$As

Antwort

2

Der Fehler liegt auf der Hand und hat nichts mit Jackson zu tun:

The prefix "beans" for element "beans:bean" is not bound.

Es sagt der beans Präfix oder Namespace ist nicht definiert. Da die beans die Standard-Namespace ist:

xmlns="http://www.springframework.org/schema/beans" 

So sollten Sie die beans: Präfix aus entfernen:

<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <beans:property name="messageConverters"> 
     <beans:list> 
      <beans:ref bean="jsonMessageConverter"/> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

Das Endergebnis sein würde:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter"/> 
     <list> 
    </property> 
</bean> 

Wenn Sie planen, Um JSON-Konvertierung durch diese Konfiguration zu aktivieren, sollte ich sagen gibt es keine Notwendigkeit für diese. Bei Vorhandensein der entsprechenden Abhängigkeit vom Klassenpfad würde Spring MVC automatisch die erforderlichen HttpMessageConverter s für die Konvertierung von/in JSON registrieren. So können Sie diese Konfiguration entfernen.

Am Ende Ihrer dispatcher-servlet.xml würde wie folgt sein:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:component-scan base-package="com.spring.rest.controllers" /> 
    <mvc:annotation-driven /> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 
</beans> 

Und ein guter Rat, wenn Sie Spring Framework neu sind, ist es besser, mit Spring Boot zu starten.

+0

Es ist besser, mit dem Standard-Namespace zu bleiben, da dies die Konfiguration übersichtlicher macht. –

+0

Ist die Anfrage-Handler-Zuordnung für Jackson erforderlich? Ich bin ziemlich neu in diesem Bereich. Wenn ich das Präfix lösche, wird der Fehler 'Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: Keine Bean mit dem Namen 'jsonMessageConverter' definiert ' – Satyadev

+0

Wenn Sie' Jackson-Databind' Abhängigkeit von der Klasse haben, können Sie ja entfernen Das. –

Verwandte Themen