Статьи

Возможности RESTful MVC в Spring 3.0 и 3.1

Ниже приводится краткое описание возможностей, которые вы должны знать, чтобы использовать 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/