我知道使用mvc:annotation-driven将免费提供给我。但是我想对它有更多的控制权。
我的配置如下:
<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属性,如何告诉它扫描一些包来查找所有jaxb bean?谢谢。
答案 0 :(得分:2)
您是否尝试过使用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 :(得分:2)
在Spring 3.1中,在Jaxb2Marshaller中添加了新属性“packagesToScan”,它可以执行您期望的操作。但是仍然有一个bug阻止它正常工作,但你可以期待下一个版本将有这个修复(我希望)。
答案 2 :(得分:1)
由于Jarno Walgemoed,这是一个扫描所有JAXB注释类的自定义类:
http://springinpractice.com/2011/12/29/its-back-the-classpathscanningjaxb2marshaller/
我在项目中使用它并且效果很好。