Spring和resteasy集成三种方式

本文介绍如何在不同Servlet容器版本下实现Resteasy与Spring的集成,包括Servlet 3.0及以上版本、低于3.0版本及与SpringMVC的整合方案。

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

对于非Jboss的Servlet容器

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

  1. 运行于Servlet版本大于等于3.0

  2. 运行于Servlet版本小于3.0

  3. 将resteasy和spring mvc整合在一起

基本配置

构建POM 依赖

  1. <dependency>  
  2.     <groupId>org.jboss.resteasy</groupId>  
  3.     <artifactId>jaxrs-api</artifactId>  
  4.     <version>${project.dependency.jboss.resteasy}</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.jboss.resteasy</groupId>  
  8.     <artifactId>resteasy-jaxrs</artifactId>  
  9.     <version>${project.dependency.jboss.resteasy}</version>  
  10. </dependency>  
  11. <!-- Resteasy 集成 Jackson2 工具包 方便JSON 转换。 -->  
  12. <dependency>  
  13.     <groupId>org.jboss.resteasy</groupId>  
  14.     <artifactId>resteasy-jackson2-provider</artifactId>  
  15.     <version>${project.dependency.jboss.resteasy}</version>  
  16. </dependency>  
  17.   
  18. <dependency>  
  19.     <groupId>org.jboss.resteasy</groupId>  
  20.     <artifactId>resteasy-jaxb-provider</artifactId>  
  21.     <version>${project.dependency.jboss.resteasy}</version>  
  22. </dependency>  
  23.   
  24. <!-- Reasteasy 集成Spring g工具包-->  
  25. <dependency>  
  26.     <groupId>org.jboss.resteasy</groupId>  
  27.     <artifactId>resteasy-spring</artifactId>  
  28.     <version>${project.dependency.jboss.resteasy}</version>  
  29. </dependency>  


Web.xml 配置

  1. <context-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>classpath:spring-config.xml</param-value>  
  4. </context-param>  

运行于Servlet版本大于等于3.0

servlet 3支持的初始化器

如果servlet版本大于3.0,那么需要加入一个servlet的初始化器

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

web.xml文件的配置

添加2个监听器,要注意的是,原本Spring默认使用的Context Loader Listener, 就不用使用了,因为第二个监听器 已经完成了加载Spring的工作了。

  1. <!-- Start Resteasy   -->  
  2. <listener>  
  3.     <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>  
  4. </listener>  
  5. <!-- load Spring Context  -->  
  6. <listener>  
  7.     <listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener</listener-class>  
  8. </listener>  

编写Pojo类

  1. @Path("/restUser")  
  2. @Named  
  3. public class RestUserService {  
  4.     @Inject  
  5.     private UserService userServiceImpl;  
  6.       
  7.     @GET  
  8.     @Path("/list")  
  9.     @Produces(value = {MediaType.APPLICATION_JSON})  
  10.     public String list() {  
  11.         User user = userServiceImpl.get(4L);  
  12.         return JacksonUtils.get().toJson(user);  
  13.     }  
  14. }  


启动服务器,访问 http://ip:port/你的项目路径/restUser/list。即可得到相应的json数据啦

运行于Servlet版本小于3.0

当运行的容器Servlet的版本小于3.0 那么之前的Serlvet3的初始化器是不能正常工作的,需要去掉。

web.xml文件的配置

要指定前缀否则和spring mvc的url-pattern冲突

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

启动服务器,访问 http://ip:port/你的项目路径/restUser/list。即可得到相应的json数据啦

整合SpringMVC

整合到SpringMVC 是不需要Serlvet 初始化器的。

Web.xml文件配置

整合到SpringMVC中去,只需要使用SpringMVC的Servlet即可。

  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>  

编写Pojo类

使用SpringMVC的Controller的类注解,就可以整合到SpringMVC中去啦!


  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.    }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蒙奇·D·路飞-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值