1. 程式人生 > >SpringMVC內容協商返回jsonxml格式

SpringMVC內容協商返回jsonxml格式

springMVC內容協商需要引入以下包

<!--springMVC內容協商需要引入以下包-->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.9.7</version>
        </dependency>
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.11.1</version>
        </dependency>

xml配置

<!-- 內容協商
        favorPathExtension引數表示是否開啟字尾,預設true。(使用形如/account/a.json、/account/a.xml的方式)
        favorParameter引數表示是否開啟request引數識別,預設false。(使用形如/account/a?format=json、/account/?format=xml的方式)
        parameterName引數表示使用引數的名字,預設format,如果配置為mediaType,則請求格式變為/account/a?mediaType=json
        ignoreAcceptHeader表示是否關閉accept頭識別,預設false,即預設開啟accept頭識別。
        defaultContentType表示伺服器預設的MediaType型別。
    -->
    <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="favorPathExtension" value="true" />
        <property name="favorParameter" value="true" />
        <property name="parameterName" value="mediaType" />
        <property name="ignoreAcceptHeader" value="true"/>
        <property name="useJaf" value="false"/>
        <property name="defaultContentType" value="application/json" />
        <property name="mediaTypes">
            <map>
                <entry key="json" value="application/json" />
                <entry key="xml" value="application/xml" />
                <entry key="string" value="text/plain" />
            </map>
        </property>
    </bean>
    <!-- ========================= VIEW解析定義 ========================= -->
    <!-- 內容協商檢視解析器;根據contentNegotiationManager使用的不同mediaTypes決定不同的 view進行響應  預設使用json-->
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="0" />
        <!-- 內容協商管理器 用於決定media type -->
        <property name="contentNegotiationManager" ref="contentNegotiationManager"/>
        <!-- 預設檢視 解析 -->
        <property name="defaultViews">
            <list>
                <!--是否有根節點的區別,不加配置返回 {"account":{"username":"admin","password":"123456"}} -->
                <!-- 加配置返回 {"username":"admin","password":"123456"}-->
                <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                    <property name="extractValueFromSingleKeyModel" value="true" />
                </bean>
                <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                    <property name="marshaller">
                        <bean class="org.springframework.oxm.xstream.XStreamMarshaller"/>
                    </property>
                </bean>
            </list>
        </property>
    </bean>
    <mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />