У меня есть пружинный контроллер (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, снова используя код контроллера как можно больше.
Используйте ContentNegotiatingViewResolver для разрешения представлений. Этот resolve будет использовать различные настроенные представления для отображения модели на основе заголовка Accepts или расширения запроса. По умолчанию он использует MappingJacksonJsonView для JSON, и вам придется настроить Xml Marshaller для использования с MarshallingView.
С помощью этой конфигурации вы можете сделать так, чтобы каждый аннотированный метод поддерживал бесконечное количество форматов данных.
Посмотрите этот пример.
Я не уверен, что вы спрашиваете об этом, но в 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
}
}