Как создать два экземпляра одного и того же пружинного контроллера, каждый с разной базой @requestMapping - PullRequest
1 голос
/ 28 июня 2010

У меня есть пружинный контроллер (MyController), который передает данные в формате json.

С некоторыми изменениями конфигурации я смогу повторно использовать тот же контроллер, и он будет обслуживать те же данные, но в формате xml, а не json.

Я бы хотел иметь возможность создать myControllerInstanceA и настроить его на использование / json в качестве базового URL, затем создать myControllerInstanceB и использовать его в качестве базового URL / xml.

Единственный способ сделать это - создать подкласс MyController и установить для @requestMapping подкласса значение / xml. Я бы предпочел выполнить некоторые настройки в своем файле springap-servlet.xml для достижения того же эффекта.

Возможно ли это?

Я предполагаю, что некоторые из вас, весенние волшебники, читающие это, возможно, подумали: "Какого черта он захочет это сделать". Итак, я объясню методы, которые я использую: я создаю контроллер, который добавляет простые Java-бины в ModelAndView. Контроллер также рекламирует представление. Представление принимает Java-бины и сериализует их в JSON или XML, в зависимости от того, как был настроен контроллер. Я думаю, что, возможно, есть более простой способ сделать это, но этот подход казался простым и достаточно простым. Кроме того, он позволяет мне работать с библиотекой JSON, с которой я знаком, а не с той, которую Spring, похоже, настроил для использования. Баллы для тех, кто говорит мне, как Spring это делает - как легко обслуживать те же данные, что и json или xml, максимально используя код контроллера.

Ответы [ 2 ]

1 голос
/ 28 июня 2010

Я не уверен, что вы спрашиваете об этом, но в Spring 3 есть ContentNegotiationResolver, который может помочь вернуть json или xml:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <map>
            <entry key="xml" value="application/xml"/>
            <entry key="json" value="application/json"/>
        </map>  
    </property>
</bean>

А в контроллере вы можете сопоставить json и xml стот же метод контроллера.

@Controller
class MyClass(){
    @RequestMapping(value={"/yourURL.json", "/yourURL.xml"})
    public Object yourController(){
        return Object
    }
}
1 голос
/ 28 июня 2010

Используйте ContentNegotiatingViewResolver для разрешения представлений. Это решение будет использовать различные сконфигурированные представления для визуализации модели на основе заголовка или расширения Accepts запроса. По умолчанию он использует MappingJacksonJsonView for JSON, и вам придется настроить маршаллер Xml для использования с MarshallingView.

В этой конфигурации каждый аннотированный метод может поддерживать бесконечные форматы данных.

Проверьте этот пример .

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