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

对于和jboss as7的集成不需要做任何工作,jboss默认集成了resteasy,只需要对业务pojo做一些jax-rs的注解标注即可。这里讲的servlet容器是类似jetty、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整合,有了这个,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

在spring bean 配置文件中添加

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

1、5

启动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>
      <init-param>
            <param-name>resteasy.servlet.mapping.prefix</param-name>
            <param-value>/rs</param-value>
        </init-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/

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

spring和resteasy 的集成方式的更多相关文章

  1. tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南

    之所以sockjs会存在,说得不好听点,就是因为微软是个流氓,现在使用windows 7的系统仍然有近半,而windows 7默认自带的是ie 8,有些会自动更新到ie 9,但是大部分非IT用户其实都 ...

  2. NoSql存储日志数据之Spring+Logback+Hbase深度集成

    NoSql存储日志数据之Spring+Logback+Hbase深度集成 关键词:nosql, spring logback, logback hbase appender 技术框架:spring-d ...

  3. 【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作

    spring boot 2.X集成ES 进行CRUD操作  完整版 内容包括: ============================================================ ...

  4. tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南(含nginx/https支持)

    之所以sockjs会存在,说得不好听点,就是因为微软是个流氓,现在使用windows 7的系统仍然有近半,而windows 7默认自带的是ie 8,有些会自动更新到ie 9,但是大部分非IT用户其实都 ...

  5. 6、Spring Boot 2.x 集成 MyBatis

    1.6 Spring Boot 2.x 集成 MyBatis 简介 详细介绍如何在Spring Boot中整合MyBatis,并通过注解方式实现映射. 完整源码: 1.6.1 创建 spring-bo ...

  6. spring boot rest 接口集成 spring security(2) - JWT配置

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  7. spring boot rest 接口集成 spring security(1) - 最简配置

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  8. Spring和MyBatis的集成

    Spring和MyBatis的整合   1. Spring和各个框架的整合 Spring目前是JavaWeb开发中最终的框架,提供一站式服务,可以其他各个框架整合集成 Spring整合方案 1.1.  ...

  9. 9、ssh的集成方式2

    1.在第一种的集成方式中,通过struts2-spring-plugin-2.1.8.1.jar这个插件让spring自动产生对应需要的action类,不需要在对应的spring.xml文件中进行配置 ...

随机推荐

  1. Falsy Bouncer-freecodecamp算法题目

    Falsy Bouncer(过滤数组假值) 要求 删除数组中的所有假值.(在JavaScript中,假值有false.null.0."".undefined 和 NaN.) 思路 ...

  2. 【转】MFC消息映射详解(整理转载)

    消息:主要指由用户操作而向应用程序发出的信息,也包括操作系统内部产生的消息.例如,单击鼠标左按钮,windows将产WM_LBUTTONDOWN消息,而释放鼠标左按钮将产生WM_LBUTTONUP消息 ...

  3. 使用MySQL yum源安装MySQL

    #首先,将MySQL Yum存储库添加到系统的存储库列表中. #在https://dev.mysql.com/downloads/repo/yum/地址中,下载mysql yum repository ...

  4. ubuntu14.04搭建LAMP环境(nginx,php,mysql,linux)详解

    最近更换开发环境至ubuntu,整理开发环境和常用软件的安装配置(更新排版) 以下安装过程经过多次操作得出,参照步骤进行操作即可 一.LAMP基本环境搭建 1 切换root账号 sudo su 2,安 ...

  5. GIMP如何制作一只大佬猫头像

    新建文件File -> 设置宽度为24px,高度5px:高级选项中将背景图片设置为无色 使用铅笔,前景色设为黑色,画出眼镜的模样,画出反光效果:将前景色设为灰色 放大图片,右击空白区域-> ...

  6. C语言中的32个关键字

    C语言中的32个关键字 数据类型关键字(12个) (1)     char:声明字符型变量或函数 (2)     double:声明双精度变量或函数 (3)     enum:声明美剧类型 (4)   ...

  7. Altium Designer入门学习笔记1.软件安装与资料收集

    一.软件安装 微信:http://url.cn/5Eudzt9 关注微信公众号"软件安装管家",点击"软件目录",弹出"软件目录",点击进入 ...

  8. Mysql源码编译安装&主从复制

    一)camke源码编译安装mysql 1)创建软件安装目录software [root@master software]# ls cmake-2.8.8.tar.gz mysql-5.5.32.tar ...

  9. Linux学习-systemctl 针对 service 类型的配置文件

    systemctl 配置文件相关目录简介 现在我们知道服务的管理是透过 systemd,而 systemd 的配置文件大部分放置于 /usr/lib/systemd/system/ 目录内. 该目录的 ...

  10. HDU 5525 Product 数论

    题意: 给出一个长度为\(n(1 \leq n \leq 10^5)\)的序列\(A_i\),\(N=\prod\limits_{i=1}^{n}i^{A_i}\).求\(N\)的所有约数的乘积. 分 ...