对于和jboss as7的集成不需要做任何工作,jboss默认集成了resteasy,只需要对业务pojo做一些jax-rs的注解标注即可。
对于非Jboss的Servlet容器
Spring和resteasy集成,主要有三种方式,
运行于Servlet版本大于等于3.0
运行于Servlet版本小于3.0
将resteasy和spring mvc整合在一起
基本配置
<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>
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-config.xml</param-value> </context-param>
如果servlet版本大于3.0,那么需要加入一个servlet的初始化器
<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-servlet-initializer</artifactId> <version>${project.dependency.jboss.resteasy}</version> </dependency>
添加2个监听器,要注意的是,原本Spring默认使用的Context Loader Listener, 就不用使用了,因为第二个监听器 已经完成了加载Spring的工作了。
<!-- 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>
@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 那么之前的Serlvet3的初始化器是不能正常工作的,需要去掉。
要指定前缀否则和spring mvc的url-pattern冲突
<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 是不需要Serlvet 初始化器的。
整合到SpringMVC中去,只需要使用SpringMVC的Servlet即可。
<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>
使用SpringMVC的Controller的类注解,就可以整合到SpringMVC中去啦!
@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()); } }