Как создать два экземпляра того же пружинного контроллера, каждого с различной основой @requestMapping

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

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

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

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

Действительно ли это возможно?

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

1
задан morgancodes 28 June 2010 в 17:00
поделиться

2 ответа

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

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

Посмотрите этот пример.

1
ответ дан 2 September 2019 в 23:26
поделиться

Я не уверен, что вы спрашиваете об этом, но в 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
ответ дан 2 September 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: