本文介绍如何通过CXF和Spring实现Restful Web Service,数据传输格式使用Json。
首先配置maven的库依赖,对于具体的实现可以参见
Simple JAX-RS Web Service in Java with Spring and CXF
也可以参照
Apache CXF与Spring集成实现Soap Webservice与RESTFul WebService
以下的依赖中spring、CXF、jackson是必须的,其他的根据需要增删
<properties> <java-version>1.8</java-version> <org.springframework-version>4.1.6.RELEASE</org.springframework-version> <org.hibernateframework-version>4.3.10.Final</org.hibernateframework-version> <org.cxf-version>3.1.1</org.cxf-version> <org.jackson-version>2.5.4</org.jackson-version> <org.postgresql-version>9.4-1201-jdbc41</org.postgresql-version> <org.c3p0-version>0.9.5</org.c3p0-version> </properties> <!-- cxf rest --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxrs</artifactId> <version>${org.cxf-version}</version> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.0</version> </dependency> <!-- jackson --> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>${org.jackson-version}</version> </dependency> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${org.springframework-version}</version> <type>jar</type> <scope>compile</scope> </dependency> <!-- hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${org.hibernateframework-version}</version> </dependency> <!-- c3p0 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>${org.c3p0-version}</version> </dependency> <!-- postgresql --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>${org.postgresql-version}</version> </dependency>
另外两个地方需要注意的是web.xml需要配置CXF的servlet
<servlet> <description>Apache CXF Endpoint</description> <display-name>cxf</display-name> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
spring的context(或者bean)配置文件中需要加上暴露出去的server信息
<import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <!-- restful --> <bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/> <jaxrs:server id="artistrs" address="/artistrs"> <jaxrs:serviceBeans> <ref bean="artistsServiceImpl" /> </jaxrs:serviceBeans> <jaxrs:providers> <ref bean="jsonProvider" /> </jaxrs:providers> </jaxrs:server>
此处json的处理非常平滑,并不需要额外的代码,只需要在xml中声明jsonProvider,另外在类接口中通过注解的方式声明HTTP的请求方式,数据传输格式。
@Consumes("application/json") @Produces("application/json") public interface ArtistService { @POST @Path("/getAllArtists/") public List<Artists> getAllArtists(); }
具体的测试方式可以通过chrome的插件postman,或者直接写java(使用HttpClient)代码如下
CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("http://localhost:8080/ArticleWS/services/artistrs/getAllArtists/"); CloseableHttpResponse response2 = httpclient.execute(httpPost); System.out.println(response2.getStatusLine()); for (Header h : response2.getAllHeaders()){ System.out.println(h.getName() + "--" + h.getValue()); } HttpEntity entity2 = response2.getEntity(); BufferedReader br = new BufferedReader(new InputStreamReader(entity2.getContent(),"UTF-8")); String line; while ((line = br.readLine())!=null) System.out.println(line); // do something useful with the response body // and ensure it is fully consumed EntityUtils.consume(entity2); response2.close();
或者通过python console
>>> import requests >>> resp = requests.post('http://localhost:8080/ArticleWS/services/artistrs/getAllArtists/') >>> resp.status_code >>> resp.content.decode()
重点是URL路径<web root>/<cxf servlet url-pattern>/<jaxrs:server address>/<Interface Path>
其他相关文档
相关推荐
cxf spring maven 实例 webservice
基于Apache CXF 3.0 Spring 4.0 Maven 3.0 构建简单Restful 接口小例子。写的不太详细,因为我也是刚开始独立构建。高手请指教 构造引导见项目内ReadMe
基于maven的cxf+spring简单demo,spring版本为4.1.6,cxf版本为3.0.8
本实例工程使用Apache CXF组件快速开发WebService。基于Spring框架,使用了Maven项目,但由于时间原因,只使用了Maven Project的框架,还是使用lib文件夹存放所需的cxf库,传入传出对象支持Json格式。
Java使用Maven导入Spring依赖
maven、spring、spring mvc、mybatis 整合实现ssm通用增删改查基础开发框架.maven、spring、spring mvc、mybatis 整合实现ssm通用增删改查基础开发框架.maven、spring、spring mvc、mybatis 整合实现ssm通用增删改查...
源码里面包含了了一个简单的插入功能,主要是为了测试mybatis是否连接上数据库的时候写的测试类,作为一个刚学java,被抓壮丁的写服务器端的妹子,我只想说,画了我3周...如题,基于maven项目的ssm框架和cxf框架的整合。
附件是一个使用CXF 实现 RESTful Webservice 完整 CRUD 实例,使用 HashMap 来模拟数据库,可以直接运行,具体使用可以参考其中的 readme;仅供有兴趣的初学者参考。
使用了cxf 同时实现了 RESTful WebService --项目启动后访问地址 http://localhost:8080/springMVC/services/rest/equipQuery/getUserById/1?_type=json 本人没有一一列明 xml json 以及post get请求 大家可以在...
自己在网上找了很多cxf实现rest风格...现在把源码发上来,java代码只有12K,主要是lib里面的全部jar包(spring、cxf等全部的jar包), 文章地址:http://blog.csdn.net/lxn39830435731415926/article/details/39448887
使用Maven搭建java项目,整合Spring,Spring MVC和Mybatis框架,配置完善便于根据个人需求对代码的修改和增加,更重要的是物美价廉喔!
用Spring maven做的restful api小Demo 仅供参考 看见有其他大神做的,积分太高了,我来个免积分下载的吧 ,不敢忘挖井人http://blog.csdn.net/u010857795/article/details/54377196 附上...
在本示例中,我们将向您展示如何将对象转换成json格式并通过spring mvc框架返回给用户。 使用技术及环境: Spring 3.2.2.RELEASE Jackson 1.9.10 JDK 1.6 Eclipse 3.6 Maven 3 PS:在spring 3 中,要输出json...
完整整合spring4、cxf3和maven3的服务端和客户端项目。
maven项目 cxf webservice mongodb mysql 公司真实现目初期实现
webservice地址 http://localhost:8080/springCxf/HelloWorld?wsdl
CXF+Spring+MyBatis+Maven项目整合,包含服务端和客户端。
Spring maven web java
webservice-CXF-spring 实现server+client
Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA