一文搞懂WebService基于CXF框架实现[JAX-RS]

本文详细介绍了RESTful架构风格及其与CRUD操作的关系,然后通过Spring和CXF框架展示了如何搭建JAX-RS服务端和客户端,包括配置、接口注解以及客户端的WebClient调用方法。

前言

上一篇文章我们了解JAX-WS基于SOAP(面向简单对象访问协议)可以转化为XML数据格式进行远程调用,WSDL文档可以帮助我们清楚的了解到数据解析格式和要求,有兴趣的同学可以点击
一文搞懂WebService基于CXF框架实现[JAX-WS]

什么是Restful架构风格

REST 全称是 Representational State Transfer(表述性状态转移),是一种软件架构风格,提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件,基于这个风格设置的软件可以简洁,更有层次,更易于实现。

什么是Restful风格的服务

REST 本质上是使用 URL 来访问资源的一种方式。总所周知,URL 就是我们平常使用的请求地址了,其中包括两部分:请求方式 与 请求路径,比较常见的请求方式是 GET 与 POST,但在 REST 中又提出了其它几种其它类型的请求方式,汇总起来有六种:GET、POST、PUT、DELETE、HEAD、OPTIONS。尤其是前四种,正好与 CRUD(增删改查)四种操作相对应:GET(查)、POST(增)、PUT(改)、DELETE(删),这正是 REST 的奥妙所在!

实际上,Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的,因为在任何时候都可以由客户端发出请求到服务端,最终返回自己想要的数据。也就是说,服务端将内部资源发布 REST 服务,客户端通过 URL 来访问这些资源,这不就是 SOA 所提倡的“面向服务”的思想吗?所以,REST 也被人们看做是一种轻量级的 SOA 实现技术,因此在企业级应用与互联网应用中都得到了广泛使用。

总结:

  • Rest是一种编码规范而不是强制性要求
  • Rest对数据的约束是标准的xml和json

Spring实现JAX-RS【复制即用】

搭建服务端

公用配置pom.xml依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.zjf</groupId>
  <artifactId>jaxrs-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>jaxrs-parent</name>
  <modules>
  	<module>rs-server</module>
  	<module>rs-client</module>
  </modules>
  
 <properties>
		<junit.version>4.12</junit.version>
		<spring.version>4.2.4.RELEASE</spring.version>
	</properties>
	
<dependencyManagement>
	<!--cxf jax-rs start -->
	<dependencies>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>3.1.7</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxrs</artifactId>
			<version>3.1.7</version>
		</dependency>
<!-- 		<dependency> -->
<!-- 			<groupId>org.apache.cxf</groupId> -->
<!-- 			<artifactId>cxf-rt-transports-http-jetty</artifactId> -->
<!-- 			<version>3.1.1</version> -->
<!-- 		</dependency> -->

		<dependency>
			<groupId>org.codehaus.jettison</groupId>
			<artifactId>jettison</artifactId>
			<version>1.3.7</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-rs-client</artifactId>
			<version>3.1.7</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-rs-extension-providers</artifactId>
			<version>3.1.7</version>
		</dependency>
<!-- 		<dependency> -->
<!-- 			<groupId>org.apache.axis2</groupId> -->
<!-- 			<artifactId>axis2-jaxws</artifactId> -->
<!-- 			<version>1.6.2</version> -->
<!-- 			<scope>runtime</scope> -->
<!-- 			<exclusions> -->
<!-- 				Causes java.lang.NoSuchMethodError: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family; -->
<!-- 				<exclusion> -->
<!-- 					<groupId>javax.ws.rs</groupId> -->
<!-- 					<artifactId>jsr311-api</artifactId> -->
<!-- 				</exclusion> -->
<!-- 			</exclusions> -->
<!-- 		</dependency> -->
		
		<!-- cxf jax-rs end -->


		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${
   
   spring.version}</version>
		</dependency>
		<dependency>
			<g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值