rest接口_Spring4.0 整合 CXF3.0,看测试接口

12f3735a9bdf2ee7e2d8984dc9cc9f74.png

文章Points:

  1. 介绍RESTful架构风格
  2. Spring配置CXF
  3. 三层初设计,实现WebService接口层
  4. 撰写HTTPClient 客户端,并实现简单调用

介绍RESTful架构风格

REST是REST之父Roy Thomas创造的,当时提出来了REST的6个特点:

  1. 客户端-服务器的
  2. 无状态的
  3. 可缓存的
  4. 统一接口
  5. 分层系统
  6. 按需编码。

其具有跨语言和跨平台的优势。

REST是一种架构风格。其描述性的状态包括资源数据的内容和表达格式(XML,JSON等)。请求其中一个资源:作为一个指定性和描述性的URI,经由HTTP将资源的表达从服务器转移到客户端,或者相反方向。

REST不是一种技术,也不是一个标准或者协议,它拥有标准:HTTP+URI+XML(JSON),来实现其要求的架构风格。

:“REST其实就像万能规则一样。如果你遵循它的规则的话,就能得她提供给你的资源数据。”

Spring配置CXF

我用的是Spring4.0.x和CXF3.0.x版本。有朋友说过让我用其他的轻量级的Web Service框架,我最后考虑了下还是用CXF。

1、第一步配置所需的依赖包jars

    org.apache.cxf    cxf-rt-frontend-jaxws    3.0.3    org.apache.cxf    cxf-rt-transports-http    3.0.3    org.apache.cxf    cxf-rt-frontend-jaxrs    3.0.3

在以前2.x的CXF上,bug和配置上很复杂。3.0以后很方便,用了MAVEN后,就是直接拷贝下上面的代码放到pom.xml即可。

2、配置Spring文件

首先配置CXF所需的XSD地址,表示我们引用了这个结构定义。

 //...配置cxf    然后用配置核心的配置。在直接加入所需要的cxf配置。                                                                                                                                                                                                                                      

根据代码的备注,想让大家记住几点重要性的点。

  • address=”/ipservice” 表示我们以后用此地址访问所提供的地址。
  • 之间加入我们要暴露出去的服务类。这里以一个简单的注册类来提供。
  • jaxrs:extensionMappings 是表示我们需要支持的协议。

3、UserInfoController是我们需要完成的暴露服务类。下面说一下初设计(这点请大家指点指点)。

三层初设计,实现WebService接口层

初设计:

按着原来的SpringMVC的三层架构,我这边把原来的Controller层转为暴露在出来的接口服务类。自然View层也就没了。

 UserInfoController的代码如下:@Path("/user")// 访问路径@Produces("*/*")public class UserInfoController{     @POST    @Path("/doTest")// 访问路径    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})// 响应内容 MIME 类型    public String doTest(String requestXml)//@QueryParam("regRequestXml")    {        System.out.println("服务端获取到客户端的报文如下:"+requestXml);                 /* 构造响应报文 */        String responseXml = "响应的报文内容";//构造报文 XML 格式的字符串                 return responseXml;    }}

暴露的接口层,也可以用inteface类加实现类来完成。

总结如下:

@POST 表示HTTP的访问模式

@Path 表示访问路径

@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 响应内容 MIME 类型

HTTPClient 客户端,并实现简单调用

“实践出真理。”拿出来遛一遛即可。

核心代码如下:/**    * 注册报文发送案例    */    private void doRegXml() throws Exception   {        /** 构造测试报文头对象 */       String randNum = RandomStringUtils.randomNumeric(8);//八位       String timeStr = TimeUtil.getTimeSimple();       DataBean dataBean = new DataBean();       dataBean.setBatch_no("N20150204");       dataBean.setData_type("000001");       dataBean.setVersion("v1.0");       dataBean.setUser_name("13957706713");       dataBean.setMsg_sign("未知");       dataBean.setRd_num(randNum);       dataBean.setRd_time(timeStr);       dataBean.setK_sign(TokenCheckUtil.getSignature(null, timeStr, randNum));        /** 构造测试报文体对象 */       RegBean regBean = new RegBean();       regBean.setReg_sn("REG20150204");       regBean.setUser_id(15);       regBean.setReg_no("33");       regBean.setReg_way("pc");       regBean.setSet_time(TimeUtil.getTimeAll());       regBean.setRet_url("未知");       regBean.setRemarks("无备注");               RegBean regBean2 = new RegBean();       regBean2.setReg_sn("REG20150203");       regBean2.setUser_id(13);       regBean2.setReg_no("44");       regBean2.setReg_way("mobile");       regBean2.setSet_time(TimeUtil.getTimeAll());       regBean2.setRet_url("未知");       regBean2.setRemarks("无备注");               List regBeans = new ArrayList();       regBeans.add(regBean);       regBeans.add(regBean2);               MsgRegBean msgRegBean = new MsgRegBean();       msgRegBean.setDataBean(dataBean);       msgRegBean.setRegBeans(regBeans);               String regRequestXml = JaxbObjectAndXmlUtil.object2Xml(msgRegBean);//构造报文 XML 格式的字符串               System.out.println(" 请求报文XML: "+regRequestXml);               /** 获取的Result报文,然后客户端处理业务。 */       String resultString = HttpUtil.doPost(" http://localhost:8080/imaopay/pay/ipservice/user/doTest",regRequestXml);               System.out.println(" 获取的Result报文: "+resultString);           }

运行后,控制台打印出如下结果:

客户端打印如下:

0e302408946f8773f55b3a0da387dd50.png

服务端获取结果如下:

50cc9707a16f7f6c0d8a597233468d9a.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值