您的位置:首页 > 编程语言 > Java开发

Spring和resteasy集成三种方式

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

对于非Jboss的Servlet容器

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

运行于Servlet版本大于等于3.0

运行于Servlet版本小于3.0

将resteasy和spring mvc整合在一起

基本配置

构建POM 依赖

[html]
view plain
copy
print?





<dependency>  
    <groupId>org.jboss.resteasy</groupId>  
    <artifactId>jaxrs-api</artifactId>  
    <version>${project.dependency.jboss.resteasy}</version>  
</dependency>  
<dependency>  
    <groupId>org.jboss.resteasy</groupId>  
    <artifactId>resteasy-jaxrs</artifactId>  
    <version>${project.dependency.jboss.resteasy}</version>  
</dependency>  
<!-- Resteasy 集成 Jackson2 工具包 方便JSON 转换。 -->  
<dependency>  
    <groupId>org.jboss.resteasy</groupId>  
    <artifactId>resteasy-jackson2-provider</artifactId>  
    <version>${project.dependency.jboss.resteasy}</version>  
</dependency>  
  
<dependency>  
    <groupId>org.jboss.resteasy</groupId>  
    <artifactId>resteasy-jaxb-provider</artifactId>  
    <version>${project.dependency.jboss.resteasy}</version>  
</dependency>  
  
<!-- Reasteasy 集成Spring g工具包-->  
<dependency>  
    <groupId>org.jboss.resteasy</groupId>  
    <artifactId>resteasy-spring</artifactId>  
    <version>${project.dependency.jboss.resteasy}</version>  
</dependency>  


Web.xml 配置

[html]
view plain
copy
print?





<context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>classpath:spring-config.xml</param-value>  
</context-param>  

运行于Servlet版本大于等于3.0

servlet 3支持的初始化器

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

[html]
view plain
copy
print?





<dependency>  
    <groupId>org.jboss.resteasy</groupId>  
    <artifactId>resteasy-servlet-initializer</artifactId>  
    <version>${project.dependency.jboss.resteasy}</version>  
</dependency>  

web.xml文件的配置

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

[html]
view plain
copy
print?





<!-- Start Resteasy   -->  
<listener>  
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>  
</listener>  
<!-- load Spring Context  -->  
<listener>  
    <listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener</listener-class>  
</listener>  

编写Pojo类

[java]
view plain
copy
print?





@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);  
    }  
}  

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

运行于Servlet版本小于3.0

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

web.xml文件的配置

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

[html]
view plain
copy
print?





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

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

整合SpringMVC

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

Web.xml文件配置

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

[html]
view plain
copy
print?





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

编写Pojo类

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

[java]
view plain
copy
print?





@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());  
   }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  resteasy