JAX-RS 简化 REST 学习

  最近一个项目用到了webservice,决定用rest来实现,发现这方面的中文资料真的是不多。经过自己一番辛苦,终于把项目搞定,在这里简单的自己的学习的过程记录一下,供入门的兄弟参考一下。

 

一、rest简介:  

  REST 是英文 Representational State Transfer 的缩写,有中文翻译为“具象状态传输”。REST 这个术语是由 Roy Fielding 在他的博士论文《 Architectural Styles and the Design of Network-based Software Architectures 》中提出的。REST 并非标准,而是一种开发 Web 应用的架构风格,可以将其理解为一种设计模式。REST 基于 HTTP,URI,以及 XML 这些现有的广泛流行的协议和标准,伴随着 REST,HTTP 协议得到了更加正确的使用。

 

二、实现方式:

  Apache 的 CXF 以及 JBoss 的 RESTEasy(待续)

  (RESTEasy)http://www.jboss.org/file-  access/default/members/resteasy/freezone/docs/1.1.GA/userguide/html_single/index.html

 

三、入门实例:

  

  http://developer.51cto.com/art/200912/172185.htm(网上很多)

  

  涉及原理及数据绑定:http://www.ibm.com/developerworks/cn/java/j-lo-jaxrs/    一篇不错的文章

  

  jersey实例  Bookkeeping实例    这是两个不错的例子,大家有时间好好看看

 

四、看了上面的文章以后,感觉项目中只用到了rest其中的一小部分,还有好多东西值得认真学习一下,以便用到以后的项目中。

  下面是自己感觉在上面例子中没有提到的一些东西,贴出来供大家参考。呵,仅一家之言啊,有不对的希望大家能提醒小弟:)

  调用POST方法时传入实体类,并返回实例类的的写法,以及数据绑定、path映射多个参数。

  客户端:

  BankInterfaceAgent.java

  

  GenericType<VirementResultInfo> generic = new GenericType<VirementResultInfo>() {};//定义返回的类型(加入泛型)
    String id = "virement/" + clientSystemNo + "," + encryptKey +","+ isEncrypted +","+ bankCode;//"/"前为路径,后为参数,参数不能为空,为空则报错
  
   //根据返回状态判断:404未找到;415不允许访问;405字段定义的方法不被允许; (另有文章描述返回状态含义)
  try {
     resultInfo = r.path(id)
               .accept(MediaType.APPLICATION_XML) //返回的接收类型
                 .type(MediaType.APPLICATION_XML)//服务器入参类型,必传
                 .post(generic,transactionInfo);  //直接传送实体类
    } catch(Exception e) {

   。。。。。。。

  

  服务器端:

  BankServiceAgent.java

  //注意:数据传输时的序列化与反序列化由实例类绑定JAXBELEMENT实现,实体类必须绑定(在实例类中加入@XmlRootElement)

  @Path("/virement/{clientSystemNo},{encryptKey},{isEncrypted},{bankCode}/") //路径和参数,注意格式(符合jax-   rs311规范)
   @POST    //方式
   @Consumes(MediaType.APPLICATION_XML)  //传入参数形式定义
   @Produces(MediaType.APPLICATION_XML) //返回结果形式定义 
 public VirementResultInfo virement(  //直接返回实体类
   @PathParam("clientSystemNo") String clientSystemNo,
   @PathParam("encryptKey") String encryptKey,
   @PathParam("isEncrypted") boolean isEncrypted,
   @PathParam("bankCode") String bankCode,
   TransactionInfo transInfo
   ) throws Exception
 {
  System.out.println("==========进入方法BankServiceAgent:virement():"+ (new Date(System.currentTimeMillis())) + "/n");
  logger.info("==========进入方法com.iss.itreasury.bi.rest.services.virement()" + (new Date(System.currentTimeMillis())) + "/n");
  
  VirementResultInfo resultInfo = new VirementResultInfo();
 

 

 

五、参考文档:

jsr311 API:https://jsr311.dev.java.net/nonav/releases/1.0/index.html

jersey实例:https://jersey.dev.java.net/

使用JAX-RS简化REST应用开发
http://www.bianceng.cn/Programming/Java/201101/23660_6.htm

Bookkeeping.rar实例在资源下载中。。。

好了,先写这么多,慢慢完善,大家如果有什么好的帖子要发上来啊,共同学习:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值