jersey获取各个参数的总结
2016-01-25 21:02
274 查看
service端:
客户端可以采用两种方式测试。
1,采用jersey实现的测试api:jersey-twitter-client-1.0-SNAPSHOT-jar-with-dependencies.jar
2,采用apache httpclient 模拟客户端的各种请求。
上面提到的参考e文中是采用的第二种方式。在这里我使用jersey测试api来实现。
过程中遇到的问题就是提交流的时候,错误的参考了e文中 “
今天修改提交类型注解为:@Consumes("application/x-www-form-urlencoded") ,测试通过!终于才恍然大悟:application/xml是客户端接受的内容类型。哎,是应该学习下http协议的相关知识,这样的问题耽误了大半天的时间!
另外,对于jax-ws中几个注解,简单总结下:
QueryParam--url ? 后面表示的参数 . get post 通用.
PathParam---url中的一部分,例如用{}表示的url中的一部分。get post 通用。
FormParam---post提交的form表单参数。 用于 post
@Path("/hello") public class HelloService { @GET @Produces("text/plain") public String helloWorld(){ return "hello world"; } /* * post param test */ @POST @Path("echo") @Consumes("application/x-www-form-urlencoded") public String echo(@FormParam("msg") String msg){ return "are you say "+msg; } /* * get param test */ @GET @Path("sex") @Produces("text/plain") public String getSex(@PathParam("name") String name){ return "male"; } /* * get {} request * http://houfeng:8080/jerseyWebServiceTest/services/hello/age/houfeng */ @GET @Path("age/{name}") @Produces("text/plain") public String getAge(@PathParam("name") String name){ return "18"; } /* * get {} request * http://houfeng:8080/jerseyWebServiceTest/services/hello/223232323 */ @GET @Path ("{id}") @Produces ("application/xml") public StreamingOutput retrieveCustomer(@PathParam ("id") String customerId) { String customerDetails = "hou,feng,232"; final String[] details = customerDetails.split(","); return new StreamingOutput() { public void write(OutputStream outputStream) { PrintWriter out = new PrintWriter(outputStream); out.println("<?xml version=/"1.0/" encoding=/"UTF-8/"?>"); out.println("<customer>"); out.println("<firstname>" + details[0] + "</firstname>"); out.println("<lastname>" + details[1] + "</lastname>"); out.println("<zipcode>" + details[2] + "</zipcode>"); out.println("</customer>"); out.close(); } }; } // get vs post @GET @Path("test_get") @Produces("text/plain") public String getTest1(@PathParam("name") String name, @Context HttpServletRequest request){ System.out.println("name:"+name);// null String result; result = request.getParameter("name"); System.out.println("name="+result); //houfeng result+= "--------"+request.getContextPath(); return result; } /* * get 方式 正确的获取参数方法 @QueryParam 或者 用 request; url里有参数的用PathParam */ @GET @Path("test_get2") @Produces("text/plain") public String getTest11(@QueryParam("name") String name, @Context HttpServletRequest request){ System.out.println("name:"+name);// houfeng String result; result = request.getParameter("name"); System.out.println("name="+result); //houfeng result+= "--------"+request.getContextPath(); return result; } @POST @Path("test_post1") @Consumes("application/x-www-form-urlencoded") @Produces("text/plain") public String getTest2(@FormParam("name") String name){ System.out.println(name);//houfeng String result=name; return result; } @POST @Path("test_post2") @Consumes("application/x-www-form-urlencoded") @Produces("text/plain") public String getTest22(@QueryParam("name") String name){ System.out.println("name:"+name);//houfeng,但是有警告。提示用FormParam String result = name; return result; } @POST @Path("test_post3") @Produces("text/plain") public String getTest2222(String entity, @Context HttpServletRequest request){ System.out.println("entity:"+entity);//hello 传入方式:resource.entity("hello").post(String.class); String result; result= "--------"+request.getContextPath(); return result; } @POST @Path("test_post4") //@Consumes("application/xml"),这样就会出错;@Consumes("application/x-www-form-urlencoded") 可以。 @Produces("text/plain") public String getTest22222(InputStream is, @Context HttpServletRequest request) throws Exception{ byte[] buf = new byte[is.available()]; is.read(buf); System.out.println("buf:"+new String(buf)); String result; result= "--------"+request.getContextPath(); return result; }
客户端可以采用两种方式测试。
1,采用jersey实现的测试api:jersey-twitter-client-1.0-SNAPSHOT-jar-with-dependencies.jar
2,采用apache httpclient 模拟客户端的各种请求。
上面提到的参考e文中是采用的第二种方式。在这里我使用jersey测试api来实现。
public void testHelloService() throws URISyntaxException { Client client = Client.create(); URI u = new URI("http://houfeng:8080/jerseyWebServiceTest/services/hello"); System.out.println(u); WebResource resource = client.resource(u); //get String result = resource.get(String.class); System.out.println(result); //get param u = new URI("http://houfeng:8080/jerseyWebServiceTest/services/hello/sex"); System.out.println(u); resource = client.resource(u); MultivaluedMapImpl params = new MultivaluedMapImpl(); params.add("name", "houfeng"); result = resource.queryParams(params).get(String.class); System.out.println(result); u =new URI("http://houfeng:8080/jerseyWebServiceTest/services/hello/test_get"); System.out.println(u); resource = client.resource(u); params = new MultivaluedMapImpl(); params.add("name", "houfeng"); result = resource.queryParams(params).get(String.class); System.out.println(result); u =new URI("http://houfeng:8080/jerseyWebServiceTest/services/hello/test_get2"); System.out.println(u); resource = client.resource(u); params = new MultivaluedMapImpl(); params.add("name", "houfeng"); result = resource.queryParams(params).get(String.class); System.out.println(result); u =new URI("http://houfeng:8080/jerseyWebServiceTest/services/hello/test_post1"); System.out.println(u); resource = client.resource(u); params = new MultivaluedMapImpl(); params.add("name", "houfeng"); result = resource.type(MediaType.APPLICATION_FORM_URLENCODED).post(String.class,params); System.out.println(result); u =new URI("http://houfeng:8080/jerseyWebServiceTest/services/hello/test_post2"); System.out.println(u); resource = client.resource(u); params = new MultivaluedMapImpl(); params.add("name", "houfeng"); result = resource.queryParams(params).type(MediaType.APPLICATION_FORM_URLENCODED).post(String.class); System.out.println(result); u =new URI("http://houfeng:8080/jerseyWebServiceTest/services/hello/test_post3"); System.out.println(u); resource = client.resource(u); result = resource.entity("hello").post(String.class); System.out.println(result); u =new URI("http://houfeng:8080/jerseyWebServiceTest/services/hello/test_post4"); System.out.println(u); resource = client.resource(u); String buf = "inputstream content."; ByteArrayInputStream bais = new ByteArrayInputStream(buf.getBytes()); result = resource.entity(bais).post(String.class); System.out.println(result); }
过程中遇到的问题就是提交流的时候,错误的参考了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
相关文章推荐
- componentsJoinedByString和componentsSeparatedByString的使用
- Spring和springmvc父子容器关系
- OkHttp获取request请求进度
- poj 1065 Wooden Sticks【贪心】
- 关于MyCAT字符集的验证
- 韩顺平 javascript教学视频_学习笔记8_js系统函数_js函数调用方式
- myeclipse10 2014(2015),终极破解方案
- ServLet中的基础知识
- C++ 《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数
- 新浪微博第三方登录
- 【智能路由器】让MT7620固件openwrt支持USB
- 虚幻4全局函数类蓝图(蓝图函数宏库)
- 使用Meshlab 的网格细分
- python数字图像处理(15):霍夫线变换
- 网页设计和网页开发人员常用到的Google Chrome扩展
- 详说Angular之指令(directive)
- muti_thread ui
- android中线程的开启,访问网络
- Java操作远程共享资源(JCIFS)
- ES6 生成器