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

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

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

我们这里讲的servlet容器是tomcat。


开始前,先做一些准备工作,引入jar包,我使用的是maven。

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


2.2.3
  3.0.4.Final
      4.2.5


下面是依赖jar


org.jboss.resteasy
resteasy-jaxrs
${resteasy-version}


org.slf4j
slf4j-simple


javassist
javassist




org.apache.httpcomponents
httpclient
${httpcomp-version}

   
org.apache.httpcomponents
httpcore
${httpcomp-version}


org.apache.httpcomponents
httpcore-nio
${httpcomp-version}


   
org.jboss.resteasy
resteasy-spring
${resteasy-version}


org.jboss.resteasy
resteasy-jettison-provider



   
org.jboss.resteasy
resteasy-jackson2-provider
${resteasy-version}

   
org.jboss.resteasy
resteasy-jaxb-provider
${resteasy-version}


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

1、1

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


        org.jboss.resteasy
        resteasy-servlet-initializer
        ${resteasy-version}
   

1、2

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



      org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
   

   

    org.jboss.resteasy.plugins.spring.SpringContextLoaderListener  
 





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 配置文件中添加


   

1、5

启动tomcat,访问 http://ip:port/你的项目路径/restUser/list

将返回json数据


2、第二种方式是。如果你的servlet容器支持的servlet小于3

那么和上面第一种方式有些区别。

去掉这个依赖


        org.jboss.resteasy
        resteasy-servlet-initializer
        ${resteasy-version}
   

在web.xml中增加



      resteasy
      org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
     
            resteasy.servlet.mapping.prefix
            /rs
       

   

  
   
      resteasy
      /rs/*
   

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


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


在spring bean配置文件中增加


   

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


      Spring
      org.springframework.web.servlet.DispatcherServlet;
   

   
      Spring
      /*
   
编写控制器,类似如下:

@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,mvc)