Статьи

Интеграция Джерси с Весной

Spring предоставляет множество преимуществ и продвигает лучшие практики благодаря своему механизму внедрения зависимостей, управлению жизненным циклом приложений и поддержке Hibernate (только некоторые из них). Кроме того, если вы хотите иметь чистый серверный REST-подобный JSON Api, я обнаружил, что Jersey очень удобен. В этой статье кратко рассказывается, как их можно объединить.

В свое небольшое свободное время я сейчас пытаюсь восстановить один из моих предыдущих частных проектов, который никогда не выходил из приватной бета-версии (я напишу больше об этом, как только опубликую его) Проект состоит из многофункционального клиентского интерфейса JavaScript с серверной частью Java-сервера, размещенного в Google AppEngine. В настоящее время я полностью переписываю его, и поэтому я начал с создания REST Api Jersey на стороне сервера, который предоставляет данные в формате JSON. Пример такого класса на Джерси:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
@Path("/sourcecodeitems")
public class SourceCodeItemGateway {   
    ...
     
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<sourcecodeitemdto> index(){
        ArrayList<sourcecodeitemdto> listOfItems = new ArrayList<sourcecodeitemdto>();
         
        for (SourceCodeItem item : sourceCodeItems) {
            listOfItems.add(new SourceCodeItemDTO(item));
        }
         
        return listOfItems;
    }
     
    ...
}

Соответствующий web.config выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
 <servlet>
  <servlet-name>Jersey Web Application</servlet-name>
  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  <init-param>
   <param-name>com.sun.jersey.config.property.packages</param-name>
   <param-value>com.jsdev.myproject.service</param-value>
  </init-param>
  <init-param>
   <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
   <param-value>true</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>Jersey Web Application</servlet-name>
  <url-pattern>/backend/*</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>welcome.jsp</welcome-file>
 </welcome-file-list>
</web-app>

Строка 7 указывает пакет, в котором лежат ваши ресурсы на Джерси, а строка 10 активирует функцию автоматического сопоставления ваших POJO с Json.

Интеграция с Spring

Чтобы интегрировать Jersey с Spring, сначала необходимо включить jersey-spring- <version> .jar, который поставляется вместе с пакетом Jersey. Включите его в свой путь сборки. Затем вы можете либо сконфигурировать свой ресурс в Джерси (выше SourceCodeItemGateway), используя аннотации Spring (@Component), либо сделать это на основе xml, как…

01
02
03
04
05
06
07
08
09
10
 
 <bean class="com.jsdev.mydevbook.service.SourceCodeItemGateway" name="sourceCodeItemGateway">
  <property name="pingService" ref="pingService">
 </property></bean>
  
 <bean class="com.jsdev.myproject.service.PingService" id="pingService">
 </bean>
 
</beans>

В строке 3 показана конфигурация bean-компонента класса ресурсов Jersey, а также настроенная зависимость (PingService), которая будет управляться и внедряться Spring. Наконец, вам нужно настроить файл web.config для правильного подключения Spring с Jersey:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<servlet>
 <servlet-name>jersey-servlet</servlet-name>
 <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
 <init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>com.jsdev.myproject.service</param-value>
 </init-param>
 <init-param>
  <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
  <param-value>true</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>
 
<servlet-mapping>
 <servlet-name>jersey-servlet</servlet-name>
 <url-pattern>/backend/*</url-pattern>
</servlet-mapping>
 
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>
  /WEB-INF/spring-service.xml
  /WEB-INF/spring-data.xml
 </param-value>
</context-param>

Обратите внимание на строку 3, как мы создаем экземпляр SpringServlet в Джерси. Строки 23 и 24 показывают путь к файлам конфигурации Spring. Ранее показанная конфигурация bean-компонента является выдержкой из spring-service.xml. Spring-data.xml должен содержать все, что связано с доступом к данным.

Справка: Интеграция Джерси со Spring от нашего партнера JCG Юри Стрампфлохнера из TechBlog Юри Стрампфлохнера .

Статьи по Теме :