• spring和resteasy 的集成方式


    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/

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

  • 相关阅读:
    多项式模板整理
    广大附中2019CSP模拟day6
    2019正睿CSP-S模拟赛十连测day6
    NOIP2020 游记
    NOI2020 退役记
    CSP2019 退役记
    目录
    NOI Online 提高
    后缀数组
    待学
  • 原文地址:https://www.cnblogs.com/Mr-Rocker/p/7729525.html
Copyright © 2020-2023  润新知