jersey获取各个参数的总结
service端: @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来实现。
[java] view plain copy 在CODE上查看代码片派生到我的代码片
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
jersey获取各个参数的总结的更多相关文章
- vue-router2.0 组件之间传参及获取动态参数
<li v-for=" el in hotLins" > <router-link :to="{path:'details',query: {id:el ...
- asp.net 正则获取url参数
现在有一种场景:Url是数据库里面的,里面带有很多参数,如何获取具体参数的值呢? var uri = new Uri(pageUrl); var queryString = uri.Query; va ...
- 【转】javascript浏览器参数的操作,js获取浏览器参数
原文地址:http://www.haorooms.com/post/js_url_canshu html5修改浏览器地址:http://www.cnblogs.com/JiangXiaoTian/ar ...
- 学习SpringMVC——如何获取请求参数
@RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView) ...
- 用JS获取地址栏参数的方法
采用正则表达式获取地址栏参数: function GetQueryString(name) { var reg = new RegExp("(^|&)"+ nam ...
- js 获取url参数的值
//获取url参数函数function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +" ...
- js对特殊字符转义、时间格式化、获取URL参数
/*特殊字符转义*/ function replace_html(str) { var str = str.toString().replace(/&/g, "&" ...
- 用JS获取地址栏参数的方法(超级简单)
方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new RegExp("( ...
- 特殊字符转义&时间格式化&获取URL参数
/*特殊字符转义*/ function htmlspecialchars (str) { var str = str.toString().replace(/&/g, "&& ...
随机推荐
- DU 4609 3-idiots FFT
题意还是比较好懂. 给出若干个木棍的长度,问这些木棍构成三角形的可能性. 那么公式很容易知道 就是这些木棍组成三角形的所有情况个数 除以 从n个木棍中取3个木棍的情况数量C(n, 3) 即可 但是很显 ...
- 在EntityFramework6中管理DbContext的正确方式——4DbContextScope:一个简单的,正确的并且灵活的管理DbContext实例的方式(外文翻译)
(译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...
- java基础学习总结——GUI编程(一)
一.AWT介绍
- vim 之cscope的使用
http://www.mcuos.com/thread-8488-1-1.html http://blog.csdn.net/longerzone/article/details/7789581 ht ...
- MVC文件上传08-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹
当需要为每个用户建立一个专属上传文件夹的时候,可以在提交文件的视图中添加一个隐藏域,并设置name="objectContext". 相关兄弟篇: MVC文件上传01-使用jque ...
- 【linux】linux查看文件大小,磁盘大小
查看指定目录下 文件或目录大小超过多少的 查看 /backup/tomcat7/ 目录下 超过500M大小的文件 并展示 文件详情 find /backup/tomcat7/ -type f -si ...
- python接口自动化4-绕过验证码登录(cookie)
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...
- idea打包可执行文件
背景: 有时候,我们会用IDEA来开发一些小工具,需要打成可运行的JAR 包:或者某些项目不是WEB应用,纯粹是后台应用,发布时,也需要打成可运行的JAR包.并且,如果依赖第三方jar时,又不希望第三 ...
- 角点检测:Harris角点及Shi-Tomasi角点检测
角点 特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系.点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(k ...
- 用java查询HBase中某表的一批数据
java代码如下: package db.query; import java.io.IOException; import org.apache.hadoop.conf.Configuration; ...