spring和resteasy集成,三种主要的方式:
对于和jboss as7的集成不需要做任何工作,jboss默认集成了resteasy,只需要对业务pojo做一些jax-rs的注解标注即可。
我们这里讲的servlet容器是tomcat。开始前,先做一些准备工作,引入jar包,我使用的是maven。
jar包版本,添加到属性文件里去:
- <properties>
- <jackson-version>2.2.3</jackson-version>
- <resteasy-version>3.0.4.Final</resteasy-version>
- <httpcomp-version>4.2.5</httpcomp-version>
- </properties>
下面是依赖jar
- <dependency>
- <groupId>org.jboss.resteasy</groupId>
- <artifactId>resteasy-jaxrs</artifactId>
- <version>${resteasy-version}</version>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- </exclusion>
- <exclusion>
- <groupId>javassist</groupId>
- <artifactId>javassist</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>${httpcomp-version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore</artifactId>
- <version>${httpcomp-version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore-nio</artifactId>
- <version>${httpcomp-version}</version>
- </dependency>
- <dependency>
- <groupId>org.jboss.resteasy</groupId>
- <artifactId>resteasy-spring</artifactId>
- <version>${resteasy-version}</version>
- <exclusions>
- <exclusion>
- <groupId>org.jboss.resteasy</groupId>
- <artifactId>resteasy-jettison-provider</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.jboss.resteasy</groupId>
- <artifactId>resteasy-jackson2-provider</artifactId>
- <version>${resteasy-version}</version>
- </dependency>
- <dependency>
- <groupId>org.jboss.resteasy</groupId>
- <artifactId>resteasy-jaxb-provider</artifactId>
- <version>${resteasy-version}</version>
- </dependency>
1、如果servlet容器支持的servlet版本大于等于3.0,那么需要做如下工作:
1、1
首先添加这个依赖,这个是servlet 3支持的初始化器
- <dependency>
- <groupId>org.jboss.resteasy</groupId>
- <artifactId>resteasy-servlet-initializer</artifactId>
- <version>${resteasy-version}</version>
- </dependency>
1、2
web.xml文件的配置,增加以下配置
- <!-- resteasy启动初始化监听器 -->
- <listener>
- <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
- </listener>
- <!-- resteasy和spring整合,有了这个,org.springframework.web.context.ContextLoaderListener就不要了 -->
- <listener>
- <listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener</listener-class>
- </listener>
- <!-- <listener> -->
- <!-- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> -->
- <!-- </listener> -->
1、3
编写POJO
- package com.vteba.service.rs.user;
- import javax.inject.Inject;
- import javax.inject.Named;
- import javax.ws.rs.GET;
- import javax.ws.rs.Path;
- import javax.ws.rs.Produces;
- import javax.ws.rs.core.MediaType;
- import com.vteba.user.model.User;
- import com.vteba.user.service.spi.UserService;
- import com.vteba.util.json.JacksonUtils;
- @Path("/restUser")
- @Named
- public class RestUserService {
- @Inject
- private UserService userServiceImpl;
- @GET
- @Path("/list")
- @Produces(value = {MediaType.APPLICATION_JSON})
- public String list() {
- User user = userServiceImpl.get(4L);
- return JacksonUtils.get().toJson(user);
- }
- }
1、4
启动tomcat,访问 http://ip:port/你的项目路径/restUser/list, 将返回json数据
2、第二种方式是。
如果你的servlet容器支持的servlet小于3,那么和上面第一种方式有些区别。
去掉这个依赖
- <dependency>
- <groupId>org.jboss.resteasy</groupId>
- <artifactId>resteasy-servlet-initializer</artifactId>
- <version>${resteasy-version}</version>
- </dependency>
在web.xml中增加
<!-- 要指定前缀否则和spring mvc的url-pattern冲突。还有一种解决办法就是将spring mvc和reseasy整合在一起 -->
- <servlet>
- <servlet-name>resteasy</servlet-name>
- <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
- <context-param>
- <param-name>resteasy.servlet.mapping.prefix</param-name>
- <param-value>/rs</param-value>
- </context-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>resteasy</servlet-name>
- <url-pattern>/rs/*</url-pattern>
- </servlet-mapping>
这样就OK了,访问地址也要加上前缀。
3、第三种就是将resteasy和spring mvc整合在一起,通过注解使他们共用spring mvc的控制器。
在spring bean配置文件中增加
- <!-- Import basic SpringMVC Resteasy integration -->
- <import resource="classpath:springmvc-resteasy.xml"/>
web.xml中只需要保留你原来的spring mvc的配置。resteasy不需要做任何配置.
- <servlet>
- <servlet-name>Spring</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet;</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Spring</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
编写控制器,类似如下:
- @Controller
- @Path(ContactsResource.CONTACTS_URL)
- public class ContactsResource
- {
- public static final String CONTACTS_URL = "/contacts";
- @Autowired
- ContactService service;
- @GET
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- @Path("data")
- public Contacts getAll()
- {
- return service.getAll();
- }
- @PUT
- @POST
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- @Path("data")
- public Response saveContact(@Context UriInfo uri, Contact contact)
- throws URISyntaxException
- {
- service.save(contact);
- URI newURI = UriBuilder.fromUri(uri.getPath()).path(contact.getLastName()).build();
- return Response.created(newURI).build();
- }
- @GET
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- @Path("data/{lastName}")
- public Contact get(@PathParam("lastName") String lastName)
- {
- return service.getContact(lastName);
- }
- @POST
- @PUT
- @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
- @Produces(MediaType.TEXT_HTML)
- public ModelAndView saveContactForm(@Form Contact contact)
- throws URISyntaxException
- {
- service.save(contact);
- return viewAll();
- }
- @GET
- @Produces(MediaType.TEXT_HTML)
- public ModelAndView viewAll()
- {
- // forward to the "contacts" view, with a request attribute named
- // "contacts" that has all of the existing contacts
- return new ModelAndView("contacts", "contacts", service.getAll());
- }
- }
这样就可以将spring mvc和resteasy整合在一起了。
项目例子https://github.com/resteasy/Resteasy/tree/3.0.4.Final/jaxrs/examples/resteasy-springMVC
resteasy参考文档http://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html/
有很丰富的内容可以自己学习