tomcat发布基于jersey的WebService(二)

来源:互联网 发布:北京做网络推广的公司 编辑:程序博客网 时间:2024/05/21 04:40

周末继续学习jersey,测试了几个get和post方式的webservice请求,并模拟客户端测试调用情况。在google中找到了这么一篇相关的文章:

REST: CRUD with JAX-RS (Jersey) 。  结果做到一半出了问题,服务端总是获取不到客户端请求的数据流内容!调试了一个下午未果,却在第二天如梦方醒般的找到了原因。教训1:学习下http协议;教训2:老外的东西不一定是对的。

 

周末的测试主要还是基于jersey的webservice服务。对get和post两种方式发送请求的几种情况都做了简单的示例(上传文件的情况未测试,待续)。

 

service端:

 

客户端可以采用两种方式测试。

1,采用jersey实现的测试api:jersey-twitter-client-1.0-SNAPSHOT-jar-with-dependencies.jar

2,采用apache httpclient 模拟客户端的各种请求。

上面提到的参考e文中是采用的第二种方式。在这里我使用jersey测试api来实现。

 

过程中遇到的问题就是提交流的时候,错误的参考了e文中 “@Consumes ("application/xml") ”的请求类型! 结果导致service 端 接受请求的方法参数InputStream 得不到内容。换作@Context HttpServeltRequest request 参数也无济于事。于是在网上搜索,在一个国外论坛中有人提到相似的问题“上传文件得不到流里的内容,但是jetty里可以,tomcat里不可以。?”。好像没有太大参考,但我也试了下,还是失败。。。

今天修改提交类型注解为:@Consumes("application/x-www-form-urlencoded") ,测试通过!终于才恍然大悟:application/xml是客户端接受的内容类型。哎,是应该学习下http协议的相关知识,这样的问题耽误了大半天的时间!

    另外,对于jax-ws中几个注解,简单总结下:
       QueryParam--url ? 后面表示的参数  .  get post 通用.
       PathParam---url中的一部分,例如用{}表示的url中的一部分。get post 通用。
       FormParam---post提交的form表单参数。     用于 post     

  ( 其他几个param稍后再学习)。