Я пытаюсь следовать этому руководству и создать службу RESTful, которая может не/маршалировать объект в/из XML. http://www.stupidjavatricks.com/?p=54
В статье выбран маршаллер xStream (я обнаружил, что его очень легко использовать и настраивать).
Дело в том, что, используя STS — собственный вариант Eclipse Spring в комплекте с tcServer — я создал проект на основе шаблона STS MVC. Это устаревший проект, начатый с Spring версии 2.4, и я перенес его на версию 3.0. Итак, шаблон создал всю необходимую XML-разметку, и я добавил свою конфигурацию, чтобы направить представление на правильное преобразование объекта (в маршалер xstream).
Вот часть моего bean-компонента, который отправляет объект в новое представление (скопировано из ссылки):
<bean id="bookXmlView" class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="autodetectAnnotations" value="true"/>
</bean>
</constructor-arg>
</bean>
Все работало хорошо, пока я не установил последнюю версию STS 2.5.2.RELEASE и не создал новый проект MVC из шаблона. (Новый шаблон больше не использует urlrewrite.xml среди некоторых других изменений).
Я установил правильную конфигурацию 1 на 1, как предлагает учебник, но теперь, несмотря ни на что, представление всегда направлено на JSP, поэтому, если мой контроллер выглядит так:
@RequestMapping(value = "/authors/{authorId}")
public ModelAndView getAuthorById(@PathVariable String authorId) {
Author author = bookService.getAuthorById(authorId);
ModelAndView mav =new ModelAndView("bookXmlView", BindingResult.MODEL_KEY_PREFIX+"author", author);
return mav;
}
Он всегда будет пытаться вернуться к представлению author.jsp, а не к объекту в виде XML. Я пробовал много вещей без успеха. Любые идеи, почему это происходит и как это исправить?
ОБНОВЛЕНИЕ ------------------- Как уже отмечалось, я добавил журналы:
Я установил его как уровень DEBUG и кое-что обнаружил:
ОТЛАДКА: org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping — отклоненное имя компонента «org.springframework.context.annotation.internalConfigurationAnnotationProcessor»: URL-пути не определены
DEBUG< /strong>: org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping — отклоненное имя компонента 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor': URL-пути не определены
DEBUG: org .springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping — отклоненное имя компонента «org.springframework.context.annotation.internalRequiredAnnotationProcessor»: пути URL-адресов не определены
DEBUG: org.springframework.web. servlet.mvc.annotation.DefaultAnnotationHandlerMapping — Отклонено имя компонента 'org.springframework.context.annotation.internalCommonAnnotationProcessor': URL-пути не определены
DEBUG: org.springframework.web.servlet.mvc.annotation.Defaul tAnnotationHandlerMapping — отклоненное имя компонента «bookXmlView»: URL-адреса не определены
Обратите внимание на эту строку: Отклоненное имя компонента 'bookXmlView': пути URL не определены. Поиск показал, что может возникнуть конфликт между <mvc:annotation-driven /> и моими автодетектированными аннотациями в настройках xstream?
В любом случае, после вызова ссылки я получил следующую запись в журнале. Обратите внимание, что представление перенаправляется в /WEB-INF/views/bookXmlView.jsp:
ОТЛАДКА: org.springframework.web.servlet.DispatcherServlet — DispatcherServlet с именем «appServlet», обрабатывающий запрос GET для [/test/page_init]
ОТЛАДКА: org.springframework .web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping — сопоставление [/page_init] с HandlerExecutionChain с обработчиком [test.test.test.HomeController@a087de] и двумя перехватчиками
DEBUG: org.springframework. web.servlet.DispatcherServlet — значение Last-Modified для [/test/page_init]: -1
DEBUG: org.springframework.web.bind.annotation.support.HandlerMethodInvoker — запуск обработчика запросов метод: public org.springframework.web.servlet.ModelAndView test.test.test.HomeController.getObject()
DEBUG: org.springframework.beans.factory.support.DefaultListableBeanFactory — вызов afterPropertiesSet( ) в bean-компоненте с именем bookXmlView
DEBUG: org.springframework.web.servlet.DispatcherServlet — Render ing view [org.springframework.web.servlet.view.JstlView: name 'bookXmlView'; URL-адрес [/WEB-INF/views/xmlView.jsp]] в DispatcherServlet с именем «appServlet»
DEBUG: org.springframework.web.servlet.view.JstlView — добавлено объект модели 'org.springframework.validation.BindingResult.books' типа [test.test.test.ObjectTest] для запроса представления с именем 'bookXmlView'
DEBUG: org.springframework.web .servlet.view.JstlView — переадресация на ресурс [/WEB-INF/views/xmlView.jsp] в InternalResourceView 'bookXmlView'
DEBUG: org.springframework.web.servlet.DispatcherServlet — успешно завершенный запрос