Как настроить Spring MVC 3 для использования jaxb2 для XML MarshallingView внутри ContentNegotiatingViewResolver? - PullRequest
1 голос
/ 10 июня 2011

Я знаю, что использование mvc: на основе аннотаций даст мне это бесплатно. Но я хотел бы иметь больше контроля над этим.

моя конфигурация похожа на следующую:

<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 не любит свойство contextPath, как заставить его сканировать какой-либо пакет, чтобы найти все bean-компоненты jaxb? Благодарю.

Ответы [ 3 ]

2 голосов
/ 27 июня 2012

В Spring 3.1 в Jaxb2Marshaller добавлено новое свойство "packagesToScan", которое выполняет то, что вы ожидаете. Однако все еще есть ошибка, препятствующая его правильной работе, но вы можете ожидать, что в следующем выпуске будет исправлено (надеюсь).

2 голосов
/ 12 июня 2011

пробовали ли вы использовать свойство classesToBeBound? В любом случае ваша проблема не имеет ничего общего с Spring MVC или ContentnegotiatingViewResolver, это с 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 голос
/ 22 августа 2011

Вот пользовательский класс, который сканирует все JAXB-аннотированные классы благодаря Ярно Вальгемоеду:

http://springinpractice.com/2011/12/29/its-back-the-classpathscanningjaxb2marshaller/

Я использую его в проекте, и он прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...