版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Restful服务端及客户端调用实例1. 新建web工程作为服务端创建服务端代码前情提示:GET(SELECT :从服务器取出资源(一项或多项)。POST( CREATE :在服务器新建一个资源。PUT( UPDATE :在服务器更新资源(客户端提供改变后的完整资源)。PATCH( UPDATE :在服务器更新资源(客户端提供改变的属性)。DELETE( DELETE :从服务器删除资源。2. 服务端代码(每个方法前有注释,包括单参数,多参数,post , get方式的例子)package com.eviac.blog.restws;import javax.ws.rs.C on sumes;
2、import javax.ws.rs.DefaultValue;import javax.ws.rs.FormParam;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;import n et.sf.jso n.J SONObject;import com.alibaba.fastjson.JSONArray;/* aut
3、hor pavithra*/这里Path定义了类的层次路径。/ 指定了资源类提供服务的 URI 路径。 Path("UserInfoService") public class UserInfo / GET 表示方法会处理HTTP GET请求URI路径。GET/这里Path定义了类的层次路径。指定了资源类提供服务的Path("/name/i")/ Produces 定义了资源类方法会生成的媒体类型。Produces(MediaType.TEXT_XML)/ PathParam向Path定义的表达式注入 URI参数值。public String userN
4、ame(PathParam("i")String i) String name = i;return "<User>" + "<Name>" + name + "</Name>" + "</User>" URI 路径。URI 路径。GET/这里Path定义了类的层次路径。指定了资源类提供服务的Path("/userinfo/id")/ Produces 定义了资源类方法会生成的媒体类型/Consumes(MediaType.AP
5、PLICATION_JSON) / 传 jsonProduces(MediaType.APPLICATION_JSON)/ PathParam向Path定义的表达式注入 URI参数值。public String userJson(PathParam("id")String id) /JSONObject jobj=JSONObject.fromObject(id);/id=jobj.getString("id");return ""name":"hanzl","age":1,"
6、;id":"+"""+id+"""/ 多参数测试POST/这里Path定义了类的层次路径。指定了资源类提供服务的Path("/user2info")/ Produces 定义了资源类方法会生成的媒体类型/Consumes(MediaType.APPLICATION_JSON) / 传 json/ 多参数配置Consumes( MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_FORM URLENCODED)Produces(MediaType
7、.APPLICATION_JSON) / 返回 json/ PathParam向Path定义的表达式注入 URI参数值。public String user2Json(FormParam("id")String id,FormParam("name") String name) System.out.println(id);System.out.println(name);return ""name":"+"""+name+"""+","
8、;age":1,"id":"+"""+id+"""/ 多参数测试 参数为 jsonPOST/这里Path定义了类的层次路径。指定了资源类提供服务的URI路径。Path("/user3info")/ Produces 定义了资源类方法会生成的媒体类型/Consumes(MediaType.APPLICATION_JSON) / 传 json/ 多参数配置Consumes( MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_F
9、ORM URLENCODED)Produces(MediaType.APPLICATION_JSON) / 返回 json/ PathParam向Path定义的表达式注入 URI参数值。public String user3Json(FormParam("id")String id) System.out.println(id);return ""name":"hanzl","age":1,"id":"+"""+id+""&q
10、uot;GETPath("/age/j")Produces(MediaType.TEXT_XML)public String userAge(PathParam("j")int j) int age = j;return "<User>" + "<Age>" + age + "</Age>" + "</User>"3. 配 置 服 务 端 web.xml ( restful 接 口 发 布 地 址 ) 在 web.xml 中加入
11、如下配置<servlet><servlet-name>Jersey REST Service</servlet-name> <servlet-class></servlet-class><init-param></param-name><param-value>com.eviac.blog.restws</param-value> </init-param><load-on-startup>1</load-on-startup></servlet
12、><servlet-mapp ing><servlet -n ame>Jersey REST Service</servlet-name<url-patter n>/rest/*</url-patter n></servlet-mapp ing>4. 编写客户端代码4.1新建java工程来进行服务端的第一次调用:package com.eviac.blog.restclie nt;import javax.ws.rs.core.MediaType;import com.s un .jersey.api.clie nt.Cl
13、ie nt;import com.s un .jersey.api.clie nt.Clie ntResp on se;import com.s un .jersey.api.clie nt.WebResource;import com.s un .jersey.api.clie nt.c on fig.Clie ntC on fig;import com.s un .jersey.api.clie nt.c on fig.DefaultClie ntCon fig;/* author pavithra*/public class UserI nfoClie nt public static
14、final Stri ng BASE_URI = "http:/localhost:8080/RestflService"public static final Stri ng PATH_NAME = "/UserI nfoService/name/"public static final Stri ng PATH_AGE = "/UserI nfoService/age/"public static void main(String args) Stri ng n ame = "Pavithra"int age
15、= 25;Clie ntConfig config = new DefaultClie ntCon fig();Clie nt clie nt = Clie nt.create(c on fig);WebResource resource = clie nt.resource(BASE_URI);WebResource nameResource = resource.path("rest").path(PATH_NAME + n ame);System.out.println("Client Response n"+ getClie ntResp on
16、se( nameResource);System.out.pri ntln ("Resp onse n" + getResp onse(n ameResource) + "nn");WebResource ageResource = resource.path("rest").path(PATH_AGE + age);System.out.println("Client Response n"+ getClie ntResp on se(ageResource);System.out.println("R
17、esponse n" + getResponse(ageResource);/*返回客户端请求。例如:GET* http:/localhost:8080/RESTfulWS/rest/Userl nfoService/name/Pavithra*返回请求结果状态“ 200 OK”* param service* return*/private static String getClie ntResp on se(WebResource resource) return resource.accept(MediaType.TEXT_XML).get(Clie ntResp on se.
18、class).toStri ng();* 返回请求结果 XML 例如:<User><Name>Pavithra</Name></User>* param service* return*/private static String getResp on se(WebResource resource) return resource.accept(MediaType.TEXT_XML).get(Stri ng.class);调用结果:Client ResponseGET http:/localhosti 8086/RestflService/re
19、st/UserlnfoService/name/Pavithra returned a response Response<llser><Name>Pavithra</Name></User>Client ResponseGET http: /localhost: B0B0/RestflServicm/rlnf口刍retumed m responwe wtmtugResponse< Jser><Age>25</A£ex/User>4.2get方式还可以直接从浏览器直接调用浏览器调用:.to bw
20、9;-C 中rw翻 swlBrijK-nwJm#ffll-hlp'*讣眇會-弍User a< Mafne>2 u/lMairiE 可UMa-<UMr>*Age*3*/Agt>以上这些都是单纯的 get方式提交的数据可使用5. 客户端调用我这有两种方式HttpURLConnection, HttpCIient两种5.IHttpURLConnection调用 restful 接口代码如下:package com.eviac.blog.restclie nt;/*测试get请求方式,请求数据为单个参数,返回结果为json* get方法提交*返回数据json*/i
21、mport java.io.Bufferedl nputStream;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.i o.I OExcepti on;import java.i o.ln putStreamReader;import java.io.Pri ntWriter;import java .n et.HttpURLC onnection;import java .n et.MalformedURLExcepti on;import java .n et.URL;publi
22、c class JavaNetURLRESTFulClie nt /post方式public static String postDownloadJson(String path,String post)URL url = n ull;/接口的地址path="http:/localhost:8080/RestflService/rest/Userl nfoService/useri nfo"/请求的参数post="id=""id":"11"""try url = new URL(path);Ht
23、tpURLCo nn ecti onhttpURLCo nn ecti on=(HttpURLCo nn ecti on)url.ope nConnection();httpURLCo nn ectio n.setRequestMethod("POST");提交模式/ conn. setCo nn ectTimeout(10000); 连接超时单位毫秒/ conn.setReadTimeout(2000); 读取超时单位毫秒/发送POST请求必须设置如下两行httpURLCo nn ectio n.setDoOutput(true);httpURLCo nn ectio n
24、.setDoI nput(true);/httpURLConnection.setRequestProperty("Content-Type", "application/json; charset=utf-8");/ 获取 URLConnection 对象对应的输出流PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream();/ 发送请求参数 printWriter.write(post);/post 的参数 xx=xx&yy=yy / flush
25、输出流的缓冲printWriter.flush();/ 开始获取数据BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream();ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len;byte arr = new byte1024; while(len=bis.read(arr)!= -1) bos.write(arr,0,len); bos.flush();bos.close();return bos.toSt
26、ring("utf-8"); catch (Exception e) e.printStackTrace(); return null;public static void main(String args) try String id="123"String targetURL = "http:/localhost:8080/RestflService/rest/UserInfoService/userinfo/"targetURL+=id;URL restServiceURL = new URL(targetURL);HttpUR
27、LConnection httpConnection = (HttpURLConnection) restServiceURL.openConnection();httpConnection.setRequestMethod("GET"); / 返回 xml/httpConnection.setRequestProperty("Content-Type", "text/plain; charset=utf-8");/ 返回 json httpConnection.setRequestProperty("Accept"
28、;, "application/json");if (httpCo nn ectio n. getRespo nseCode() != 200) throw new RuntimeException("HTTP GET Request Failed withError code :"+ httpC onnection. getResp on seCode();In putStreamReader(BufferedReaderresp on seBuffer= newBufferedReader( new(httpC onnection. get In p
29、utStream();String output;System.out.pri ntl n("Output from Server:n");while (output = resp on seBuffer.readL in e() != n ull) System.out.pri ntl n(o utput);/解析jsonhttpC onnection. disc onn ect(); catch (MalformedURLException e) e.pri ntStackTrace(); catch (IOExcepti on e) e.pri ntStackTrac
30、e();/ postDow nl oadJs on(nu II ,n ull);5.2HttpClient 调用 restful接口( post & get方式)代码如下:package com.eviac.blog.restclie nt;import java.io.BufferedReader;import java.i o.I OExcepti on;import java.i o.ln putStream;import java.io.InputStreamReader;import mons.httpclient.HttpClient; import mons.httpcl
31、ient.HttpException;import mons.httpclient.NameValuePair;import mons.httpclient.methods.GetMethod; import mons.httpclient.methods.PostMethod;public class RestClient public static void main(String args) String urlpost = "http:/localhost:8080/RestflService/rest/UserInfoService/user3info"Strin
32、g urlget = "http:/localhost:8080/RestflService/rest/UserInfoService/name/1" HttpClient client = new HttpClient();/POST 方法GetMethod getmethod=new GetMethod(urlget); PostMethod method = new PostMethod(urlpost); NameValuePair data = new NameValuePair("id", ""id":"
33、;11""); method.setRequestBody(data);try int statusCode = client.executeMethod(method);if (statusCode = 200) / String strJson = method.getResponseBodyAsString();/ System.out.println("post 方法 ="+strJson);BufferedReader reader = new BufferedReader(new InputStreamReader(method.getRes
34、ponseBodyAsStream();StringBuffer stringBuffer = new StringBuffer();String str = ""while(str = reader.readLine()!=null) stringBuffer.append(str);String ts = stringBuffer.toString(); System.out.println("post 方法 ="+ts); catch (HttpException e) e.printStackTrace(); catch (IOException
35、 e) e.printStackTrace();/ 执行 get 方法try int statusCode = clie nt.executeMethod(getmethod);if (statusCode = 200) String strJs on = getmethod.getResp on seBodyAsStri ng();System.out.println("get 方法="+strJson);/ System.out.pri ntl n( map.get("user").getUser name(); catch (HttpExcepti
36、 on e) e.pri ntStackTrace(); catch (IOExcepti on e) e.pri ntStackTrace();5.3HttpURLConnection调用 restful接口( post,多参数)服务端方法配置:/多参数测试POST/这里Path定义了类的层次路径。指定了资源类提供服务的URI路径。Path( "/user2i nfo" )/ Produces定义了资源类方法会生成的媒体类型Con sumes(MediaType.APPLICATION_JSON)/传 jso n/多参数配置Co nsumef MediaType. MUL
37、TIPART_FORM_DATAediaType. Application_form_urlencoejedProduces(MediaType. APPLICATION_JSON 返回json / PathParam向Path定义的表达式注入URI参数值。 public String user2Json(FormParanO"id")Stringid , FormParann "name") Stringnam® System. out .println(id );System. out .println(nam®return&qu
38、ot;" name'":"+""" +n ame+""" +","age":1,"id":"+"""+id +"""客户端调用:代码package com.eviac.blog.restclie nt;import java.io.Buffered In putStream;import java.io.BufferedReader;import java.io.ByteArra
39、yOutputStream;import java.i oO Excepti on;import java.i on putStreamReader;import java.io.Pri ntWriter;import java. net.HttpURLC onn ectio n;import java .n et.MalformedURLExcepti on;import java .n et.URL;/* author Hanlong* 多参数配置* 请求数据为为多个参数* 返回结果是 Json* 放在 body 体里* Post 方法提交*/public class Test2paras
40、 /post 方式public static String postDownloadJson(Stringpath,String post)URL url = null;path="http:/localhost:8080/RestflService/rest/UserInfoService/user2info"post=""id":"11"""String post1="id=1&name=hanzl"try url = new URL(path);HttpURLConnec
41、tion httpURLConnection =(HttpURLConnection) url.openConnection();httpURLConnection.setRequestMethod("POST");/提交模式/ conn.setConnectTimeout(10000);/ 连 接超时 单位毫秒/ conn.setReadTimeout(2000);/ 读取超 时 单位毫秒/发送POST请求必须设置如下两行httpURLConnection.setDoOutput(true); httpURLConnection.setDoInput(true);/htt
42、pURLConnection.setRequestProperty("Content-Type", "application/json; charset=utf-8");/获取 URLConnection 对象对应的输出流PrintWriter printWriter = newPrintWriter(httpURLConnection.getOutputStream();/发送请求参数printWriter.write(post1);/post 的参数 xx=xx&yy=yy/ flush 输出流的缓冲 printWriter.flush();
43、/ 开始获取数据BufferedInputStream bis = newBufferedInputStream(httpURLConnection.getInputStream( );ByteArrayOutputStream bos = newByteArrayOutputStream();int len;byte arr = new byte1024; while(len=bis.read(arr)!= -1) bos.write(arr,0,len); bos.flush();bos.close();return bos.toString("utf-8"); cat
44、ch (Exception e) e.printStackTrace();return null;public static void main(String args) System.out.println( postDownloadJson(nuII,nulI);5.4HttpURLConnection调用 restful接口(post,参数为 json,返回参数为json)服务端/多参数测试参数为jsonPOST/这里Path定义了类的层次路径。指定了资源类提供服务的URI路径。Path( "/user3i nfo")/ Produces定义了资源类方法会生成的媒体类
45、型Con sumes(MediaType.APPLICATION_JSON)/# json/多参数配置Co nsumes MediaType.MULTIPART_FORM_DATAediaType. Application_form_urlencoejedProduces(MediaType. APPLICATION_JSON / 返回json/ PathParam向Path定义的表达式注入URI参数值。public String user3Json(FormParanO"id")Stri ngid ) System. out .println(id );+ "&
46、quot;"+id +"""return"" name":"ha nzl","age":1,"id":"客户端代码package com.eviac.blog.restclie nt; import java.io.BufferedI nputStream; import java.io.BufferedReader;import java.io.ByteArrayOutputStream; import java.i o.IO Excepti on;import java.i o.ln putStreamReader;import java.io .Prin tWriter;import java .n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养殖场建设安全施工合同
- 车辆租赁合同纠纷
- 养殖场板房施工协议
- 投影仪租赁担保合同
- 城市排水管网改造需求书
- 文化旅游区地平施工合同
- 矿山配电房新建施工合同
- 养老机构设施维护管理手册
- 私立医院医师聘用合同书
- 油气田水平井导向钻进施工合同
- 建设项目“三同时”环境保护验收一览表
- 箱涵清淤专项施工方案
- 年金险的销售逻辑课件
- 2023年沈阳桃仙国际机场股份有限公司招聘笔试模拟试题及答案解析
- 【2022】外研版英语八年级上册知识点总结(精华版)
- 意义类答题方法
- 实验三四大麦类小麦、大麦、黑麦、燕麦
- 三年级上册数学课件-《乘火车》 北师大版 (共25张PPT)
- 劳动法律法规培训 课件
- 基于综合实践活动的德育校本课程开发与实施优秀获奖科研论文
- 《兄弟》作品简介名著导读PPT模板
评论
0/150
提交评论