Ниже приводится краткое описание возможностей, которые вы должны знать, чтобы использовать Spring MVC RESTful Web Services. В этой статье будут показаны доступные функции, но не будут обсуждаться плюсы и минусы, варианты использования или мы расскажем о преимуществах REST.
PUT & POST в клиентах на основе браузера
Браузеры не разрешают PUT & DELETE — в файле web.xml настройте HiddenHttpMethodFilter & на странице добавьте следующее в вашу форму <input type = «hidden» name = «_ method» value = «PUT» />, для формы отправки установлено значение POST , При использовании тега Spring <form: form> для вас создается скрытое поле, используйте любой из стандартных 7 глаголов HTTP по желанию.
Получение значений в URL-пути, путь RESTful
@PathVariable в методах контроллера для извлечения значений из пути.
Вам редко нужно писать собственные парсеры
<mvc: annotation-driven /> — автоматически регистрирует несколько маршаллеров просто при наличии соответствующего jar в classpath
Тип | Группа: артефакт: ток-версия |
---|---|
JAXB2 | com.sun.xml.bind: JAXB-осущ: 2.2.4 |
JAXP | javax.xml: JAXP-апи: 1.4.2 |
Atom / RSS | рим: рим: 1,0 |
JSON | org.codehaus.jackson: джексон-картографа-над уровнем моря: 1.8.3 |
Настроить — не кодировать
Автоматическая сортировка и демарширование
аннотаций контроллера данных XML, JSON, ATOM / RSS : @RequestBody & @ResponseBody
Пример конфигурации JAXB2 в моем блоге OXM с именем http://gordondickens.com/wordpress/2011/02/07/sending-beans -по XML-с-jmstemplate /
Отправка кодов ответов HTTP клиентам
Статус успешного ответа с аннотацией метода контроллера @ResponseStatus.
Обработка исключений с помощью аннотации @ExceptionHandler для методов контроллера ИЛИ пользовательских классов, также с аннотированным @ResponseStatus.
Примечание: @ResponseStatus отключает поведение по умолчанию методов void controller, автоматически возвращающих представление.
Согласование контента
Принять заголовок в клиентах на основе браузера
Заголовок HTML Accept не является надежным вариантом для клиентов на основе браузера, чтобы запрашивать тип контента. См. Согласование контента ниже.
Управление клиентскими запросами типов контента
Заголовок HTTP Accept является типичным средством REST для получения запрошенного клиентом типа содержимого MIME (application / JSON, application / XML и т. Д.).
Согласование содержимого — гибкие параметры конфигурации
SpringN ContentNegotiatingViewResolver для настройки формата данных запроса клиента. Несколько методов помимо стандартного заголовка «Accept», которые не будут работать, если у вас есть клиенты на основе браузера (заголовок Accept, расширение URL, параметр, Java Activation Framework). Расширение URL-адреса (называемое расширением файла) позволяет добавлять к URL-адресу строку, которая может быть сопоставлена с типом MIME.
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="mediaTypes"> <map> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> <entry key="htm" value="text/html" /> </map> </property> <property name="defaultContentType" value="text/html" /> </bean>
Эти же сочетания клавиш можно использовать в параметре, где URL может иметь «? Format = json». Для JAF jar содержит файл /lib/mime.types с уже определенными отображенными типами.
Тип | Группа: артефакт: ток-версия |
---|---|
Активация Java | javax.activation: активация: 1.1.1 |
Java Mail | javax.mail: почта: 1.4.1 |
Клиентская сторона с RestTemplate
Spring RestTemplate для разработки на стороне клиента. В стиле Spring Template просто установите URL, вызовите метод и обработайте результаты. Основные точки расширения в шаблонах Spring выполняются с помощью обратных вызовов.
HTTP метод | Метод RestTemplate |
---|---|
УДАЛИТЬ | удалить (java.lang.String, java.lang.Object …) |
ПОЛУЧИТЬ | getForObject (java.lang.String, java.lang.Class, java.lang.Object …), getForEntity (java.lang.String, java.lang.Class, java.lang.Object …) |
ГЛАВА | headForHeaders (String url, String … urlVariables) |
ПАРАМЕТРЫ | optionsForAllow (String url, String … urlVariables) |
ПОЧТА | postForLocation (String url, Object request, String … urlVariables) |
RestTemplate Callbacks
Перезвоните | Описание | Интерфейс |
---|---|---|
RequestCallback | Вызывается при вызове метода execute | открытый интерфейс RequestCallback {void doWithRequest (запрос ClientHttpRequest) выдает IOException; } |
AcceptHeaderRequestCallback | Обработка заголовков Accept | public void doWithRequest (запрос ClientHttpRequest) |
HttpEntityRequestCallback | Записывает предоставленный объект в выходной поток | public void doWithRequest (ClientHttpRequest httpRequest) |
Улучшения REST в Spring 3.1
Настраиваемый @MVC
- Пользовательская поддержка @ExceptionHandler для методов @Controller
- Пользовательская поддержка @ExceptionHandler для @RequestBody & @ResponseBody
- Вы можете написать BeanPostProcessor для изменения AnnotationMethodHandlerAdapter после создания
- Автоматическое обнаружение пользовательских HttpMessageConverter — например, пользовательских MyMappingJacksonHttpMessageConverter
- Поддержка распознавателя пользовательских кодов сообщений с помощью <mvc: annotation-driven />
<mvc:annotation-driven> <mvc:custom-web-argument-resolvers> <bean class="org.example.MyWebArgumentResolver"/> </mvc:custom-web-argument-resolvers> </mvc:annotation-driven>
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven>
<mvc:annotation-driven message-codes-resolver="org.example.MyMessageCodesResolver"/>
Улучшения REST
- Перехватчики для RestTemplate
- ClientHttpRequestInterceptor — Перехват ClientHttpResponse (запрос HttpRequest, тело byte [], выполнение ClientHttpRequestExecution)
- Свойство bufferRequestBody для SimpleClientHttpRequestFactory для обработки больших полезных нагрузок с помощью RestTemplate
- Новый WebRequest.checkNotModified (String) // ранее имел долгую поддержку
- Новый @ResponseEntity
- Чтобы поддержать OAuth с ClientHttpRequestInterceptors
Другие концепции отдыха
HATEOAS
Гипермедиа как двигатель состояния приложения
WADL
Язык описания веб-приложений
Резюме
Spring MVC REST помогает нам в:
- Мощь <mvc: annotation-driven /> обеспечивает нам автоматическое маршалинг / демаршаллинг контента в REST
- Гибкость конфигурации ContentNegotiatingViewResolver для наших клиентов на основе браузера
С http://gordondickens.com/wordpress/2011/07/25/restful-mvc-features-in-spring-3-0-and-3-1/