Весной получим как xml, так и jsp - PullRequest
3 голосов
/ 29 июля 2011

Я работаю над приложением, которое предоставляет представления для некоторых служб и выступает в качестве веб-службы для других.

В контроллере я сопоставил «/» с представлением, и когда приложение запускается, это представление отображается.
Теперь, когда я пытаюсь использовать видоискатель, как это

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">  
<property name="mediaTypes">
    <map>
        <entry key="html" value="text/html" />
        <entry key="xml" value="application/xml" />
       </map>
</property>
<property name="defaultViews">
    <list>
    <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
    <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
         <constructor-arg>
        <bean class="org.springframework.oxm.xstream.XStreamMarshaller"
            p:autodetectAnnotations="false" />
              </constructor-arg>
    </bean>
    </list>
    </property>
<property name="viewResolvers">
    <list>
        <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
    </list>
    </property>  


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

Но проблема сейчас в том, что все идет в формате xml. Поэтому, когда я запускаю приложение
первая страница по умолчанию поставляется в формате xml, но я хочу просмотреть.

1 Ответ

3 голосов
/ 29 июля 2011

По умолчанию ContentNegotiatingViewResolver использует заголовок запроса HTTP Accept, чтобы решить, какое представление отображать.Он будет отправлять обратно представление XML только в том случае, если клиент указал в этом заголовке, что он может обрабатывать application/xml тип содержимого, что делают некоторые браузеры.

Если браузер указывает, что он может принимать HTML и XML, тогда это непредсказуемо, к которому вы вернетесь.В отсутствие какой-либо другой информации Spring не может решить, какую вы хотите.

Если ваш URL-путь просто /, то вы не предоставляете ему никакой полезной информации, кроме того, что отправляет браузер.по умолчанию.

ContentNegotiatingViewResolver можно перенастроить для использования расширения файла в URL-адресе, чтобы решить, какое представление разрешить, установив для свойства favorPathExtension значение true.Это будет, например, ответ на запрос /blah.xml с XML, имеющий приоритет над заголовком Accept.

ContentNegotiatingViewResolver имеет несколько других вариантов, я предлагаю прочитать javadoc осторожно.

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