2011-06-10 3 views
1

Je sais utiliser mvc: annotation-driven me le donnera gratuitement. Mais j'aimerais en avoir plus de contrôle.comment configurer spring mvc 3 pour utiliser jaxb2 pour xml MarshallingView dans ContentNegotiatingViewResolver?

ma config est comme ce qui suit:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
     <property name="order" value="1" /> 
     <property name="mediaTypes"> 
      <map> 
       <entry key="json" value="application/json" /> 
       <entry key="xml" value="text/xml"/> 
      </map> 
     </property> 
     <property name="defaultViews"> 
      <list> 
       <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
        <property name="prefixJson" value="false" /> 
        <property name="objectMapper" ref="jacksonObjectMapper" /> 
       </bean> 
       <bean class="org.springframework.web.servlet.view.xml.MarshallingView" > 
        <property name="marshaller"> 
          <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
          <property name="contextPath" value="com.appservices.dtos"/> 
         </bean> 
        </property> 
       </bean> 
      </list> 
     </property> 
    </bean> 

Spring n'aime pas la propriété contextPath, comment dire pour scanner un paquetage pour trouver tous les grains de JAXB? Merci.

+0

obtenez-vous une exception lors de l'initialisation de votre contexte d'application? quelle version de printemps utilisez-vous? Rappelez-vous aussi que les paquets spécifiés dans le contextPath sont séparés par: et ne voient pas les sous-paquets, à savoir les classes dto doivent être dans le même paquet exact – ilcavero

Répondre

2

Avez-vous essayé la propriété classesToBeBound? Dans tous les cas, votre problème n'a rien à voir avec mvc de printemps ou contentnegotiatingViewResolver, est avec Jaxb2Marshaller

<bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound"> 
     <list> 
      <value>org.springframework.oxm.jaxb.Flight</value> 
      <value>org.springframework.oxm.jaxb.Flights</value>     
     </list> 
    </property> 
    <property name="schema" value="classpath:org/springframework/oxm/schema.xsd"/> 
</bean> 
+1

je savais que cela fonctionnera. Mais je n'aime pas lister toutes les classes de jaxb. Et dans cette approche, vous devrez créer des classes "collection", c'est-à-dire que vous devez créer une classe "Flights" pour la classe "Flight". – Bobo

2

Au printemps 3.1, nouvelle propriété « packagesToScan » est ajouté à Jaxb2Marshaller qui exécute ce que vous attendez. Cependant, il y a toujours un bug qui l'empêche de fonctionner correctement, mais vous pouvez vous attendre à ce que la prochaine version ait ce correctif (j'espère).

+0

Cela semble fonctionner maintenant (4.2) – z0r

Questions connexes