spring和resteasy集成,构建restful风格服务

spring和resteasy集成,三种主要的方式:

对于和jboss as7的集成不需要做任何工作,jboss默认集成了resteasy,只需要对业务pojo做一些jax-rs的注解标注即可。

我们这里讲的servlet容器是tomcat。开始前,先做一些准备工作,引入jar包,我使用的是maven。

jar包版本,添加到属性文件里去:

  1. <properties>  
  2. <jackson-version>2.2.3</jackson-version>  
  3.   <resteasy-version>3.0.4.Final</resteasy-version>  
  4.       <httpcomp-version>4.2.5</httpcomp-version>  
  5. </properties>  

下面是依赖jar
  1. <dependency>  
  2. <groupId>org.jboss.resteasy</groupId>  
  3. <artifactId>resteasy-jaxrs</artifactId>  
  4. <version>${resteasy-version}</version>  
  5. <exclusions>  
  6. <exclusion>  
  7. <groupId>org.slf4j</groupId>  
  8. <artifactId>slf4j-simple</artifactId>  
  9. </exclusion>  
  10. <exclusion>  
  11. <groupId>javassist</groupId>  
  12. <artifactId>javassist</artifactId>  
  13. </exclusion>  
  14. </exclusions>  
  15. </dependency>  
  16. <dependency>  
  17. <groupId>org.apache.httpcomponents</groupId>  
  18. <artifactId>httpclient</artifactId>  
  19. <version>${httpcomp-version}</version>  
  20. </dependency>  
  21.     <dependency>  
  22. <groupId>org.apache.httpcomponents</groupId>  
  23. <artifactId>httpcore</artifactId>  
  24. <version>${httpcomp-version}</version>  
  25. </dependency>  
  26. <dependency>  
  27. <groupId>org.apache.httpcomponents</groupId>  
  28. <artifactId>httpcore-nio</artifactId>  
  29. <version>${httpcomp-version}</version>  
  30. </dependency>  
  31.   
  32.     <dependency>  
  33. <groupId>org.jboss.resteasy</groupId>  
  34. <artifactId>resteasy-spring</artifactId>  
  35. <version>${resteasy-version}</version>  
  36. <exclusions>  
  37. <exclusion>  
  38. <groupId>org.jboss.resteasy</groupId>  
  39. <artifactId>resteasy-jettison-provider</artifactId>  
  40. </exclusion>  
  41. </exclusions>  
  42. </dependency>  
  43.     <dependency>  
  44. <groupId>org.jboss.resteasy</groupId>  
  45. <artifactId>resteasy-jackson2-provider</artifactId>  
  46. <version>${resteasy-version}</version>  
  47. </dependency>  
  48.     <dependency>  
  49. <groupId>org.jboss.resteasy</groupId>  
  50. <artifactId>resteasy-jaxb-provider</artifactId>  
  51. <version>${resteasy-version}</version>  
  52. </dependency>  

1、如果servlet容器支持的servlet版本大于等于3.0,那么需要做如下工作:

1、1

首先添加这个依赖,这个是servlet 3支持的初始化器

  1. <dependency>  
  2.         <groupId>org.jboss.resteasy</groupId>  
  3.         <artifactId>resteasy-servlet-initializer</artifactId>  
  4.         <version>${resteasy-version}</version>  
  5.     </dependency>  

1、2

web.xml文件的配置,增加以下配置

  1. <!-- resteasy启动初始化监听器 -->  
  2. <listener>  
  3.       <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>   
  4.     </listener>  
  5.     <!-- resteasy和spring整合,有了这个,org.springframework.web.context.ContextLoaderListener就不要了  -->  
  6. <listener>  
  7.     <listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener</listener-class>    
  8.   </listener>  
  9.   
  10. <!-- <listener> -->  
  11. <!-- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> -->  
  12. <!-- </listener> -->  

1、3

编写POJO

  1. package com.vteba.service.rs.user;  
  2. import javax.inject.Inject;  
  3. import javax.inject.Named;  
  4. import javax.ws.rs.GET;  
  5. import javax.ws.rs.Path;  
  6. import javax.ws.rs.Produces;  
  7. import javax.ws.rs.core.MediaType;  
  8.   
  9. import com.vteba.user.model.User;  
  10. import com.vteba.user.service.spi.UserService;  
  11. import com.vteba.util.json.JacksonUtils;  
  12.   
  13. @Path("/restUser")  
  14. @Named  
  15. public class RestUserService {  
  16.     @Inject  
  17.     private UserService userServiceImpl;  
  18.       
  19.     @GET  
  20.     @Path("/list")  
  21.     @Produces(value = {MediaType.APPLICATION_JSON})  
  22.     public String list() {  
  23.         User user = userServiceImpl.get(4L);  
  24.         return JacksonUtils.get().toJson(user);  
  25.     }  
  26. }  

1、4

启动tomcat,访问 http://ip:port/你的项目路径/restUser/list, 将返回json数据

2、第二种方式是。

如果你的servlet容器支持的servlet小于3,那么和上面第一种方式有些区别。

去掉这个依赖

  1. <dependency>  
  2.         <groupId>org.jboss.resteasy</groupId>  
  3.         <artifactId>resteasy-servlet-initializer</artifactId>  
  4.         <version>${resteasy-version}</version>  
  5.     </dependency>  

在web.xml中增加

<!-- 要指定前缀否则和spring mvc的url-pattern冲突。还有一种解决办法就是将spring mvc和reseasy整合在一起 -->

  1. <servlet>  
  2.       <servlet-name>resteasy</servlet-name>  
  3.       <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>  
  4.       <context-param>  
  5.             <param-name>resteasy.servlet.mapping.prefix</param-name>  
  6.             <param-value>/rs</param-value>  
  7.         </context-param>  
  8.     </servlet>  
  9.     
  10.     <servlet-mapping>  
  11.       <servlet-name>resteasy</servlet-name>  
  12.       <url-pattern>/rs/*</url-pattern>  
  13.     </servlet-mapping>  


这样就OK了,访问地址也要加上前缀。

3、第三种就是将resteasy和spring mvc整合在一起,通过注解使他们共用spring mvc的控制器。

在spring bean配置文件中增加

  1. <!-- Import basic SpringMVC Resteasy integration -->  
  2.     <import resource="classpath:springmvc-resteasy.xml"/>  


web.xml中只需要保留你原来的spring mvc的配置。resteasy不需要做任何配置.

  1. <servlet>  
  2.       <servlet-name>Spring</servlet-name>  
  3.       <servlet-class>org.springframework.web.servlet.DispatcherServlet;</servlet-class>  
  4.    </servlet>  
  5.   
  6.    <servlet-mapping>  
  7.       <servlet-name>Spring</servlet-name>  
  8.       <url-pattern>/*</url-pattern>  
  9.    </servlet-mapping>  

编写控制器,类似如下:
  1. @Controller  
  2. @Path(ContactsResource.CONTACTS_URL)  
  3. public class ContactsResource  
  4. {  
  5.    public static final String CONTACTS_URL = "/contacts";  
  6.    @Autowired  
  7.    ContactService service;  
  8.   
  9.    @GET  
  10.    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  
  11.    @Path("data")  
  12.    public Contacts getAll()  
  13.    {  
  14.       return service.getAll();  
  15.    }  
  16.   
  17.    @PUT  
  18.    @POST  
  19.    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  
  20.    @Path("data")  
  21.    public Response saveContact(@Context UriInfo uri, Contact contact)  
  22.          throws URISyntaxException  
  23.    {  
  24.       service.save(contact);  
  25.       URI newURI = UriBuilder.fromUri(uri.getPath()).path(contact.getLastName()).build();  
  26.       return Response.created(newURI).build();  
  27.    }  
  28.   
  29.    @GET  
  30.    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  
  31.    @Path("data/{lastName}")  
  32.    public Contact get(@PathParam("lastName") String lastName)  
  33.    {  
  34.       return service.getContact(lastName);  
  35.    }  
  36.   
  37.    @POST  
  38.    @PUT  
  39.    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)  
  40.    @Produces(MediaType.TEXT_HTML)  
  41.    public ModelAndView saveContactForm(@Form Contact contact)  
  42.          throws URISyntaxException  
  43.    {  
  44.       service.save(contact);  
  45.       return viewAll();  
  46.    }  
  47.      
  48.    @GET  
  49.    @Produces(MediaType.TEXT_HTML)  
  50.    public ModelAndView viewAll()  
  51.    {  
  52.       // forward to the "contacts" view, with a request attribute named  
  53.       // "contacts" that has all of the existing contacts  
  54.       return new ModelAndView("contacts""contacts", service.getAll());  
  55.    }  
  56. }  

这样就可以将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/

有很丰富的内容可以自己学习

<!-- 要指定前缀否则和spring mvc的url-pattern冲突。还有一种解决办法就是将spring mvc和reseasy整合在一起 -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒙奇·D·路飞-

感谢老板您就是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值