restful服务端及客户端开发_第1页
restful服务端及客户端开发_第2页
restful服务端及客户端开发_第3页
restful服务端及客户端开发_第4页
restful服务端及客户端开发_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、WORDWORDRestful服务端及客户端调用实例.新建web工程作为服务端创建服务端代码前情提示:GET(SELECT):从服务器取出资源(一项或多项)。POST(CREATE):在服务器新建一个资源。PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。DELETE(DELETE):从服务器删除资源。.服务端代码(每个方法前有注释,包括单参数,多参数,post,get方式的例子)package.eviac.blog.restws;importjavax.ws.rs.Consumes;importjav

2、ax.ws.rs.DefaultValue;importjavax.ws.rs.FormParam;importjavax.ws.rs.GET;importjavax.ws.rs.POST;importjavax.ws.rs.Path;importjavax.ws.rs.PathParam;importjavax.ws.rs.Produces;importjavax.ws.rs.core.MediaType;importnet.sf.json.JSONObject;import.alibaba.fastjson.JSONArray;/*authorpavithra*/这里Path定义了类的层次

3、路径。/指定了资源类提供服务的URI路径。Path(UserInfoService)publicclassUserInfo/GET表示方法会处理HTTPGET请求GET/这里Path定义了类的层次路径。指定了资源类提供服务的URI路径。Path(/name/i)/Produces定义了资源类方法会生成的媒体类型。Produces(MediaType.TEXT_XML)/PathParam向Path定义的表达式注入URI参数值。publicStringuserName(PathParam(i)Stringi)Stringname=i;return+name+;GET/这里Path定义了类的层次路

4、径。指定了资源类提供服务的URI路径。Path(/userinfo/id)/Produces定义了资源类方法会生成的媒体类型Consumes(MediaType.APPLICATION_JSON)传jsonProduces(MediaType.APPLICATION_JSON)/PathParam向Path定义的表达式注入URI参数值。publicStringuserJson(PathParam(id)Stringid)/JSONObjectjobj=JSONObject.fromObject(id);/id=jobj.getString(id);returnname:hanzl,age:1,

5、id:+id+;/多参数测试POST/这里Path定义了类的层次路径。指定了资源类提供服务的URI路径。Path(/user2info)/Produces定义了资源类方法会生成的媒体类型Consumes(MediaType.APPLICATION_JSON)传json/多参数配置Consumes(MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_FORM_URLENCODED)Produces(MediaType.APPLICATION_JSON)返回json/PathParam向Path定义的表达式注入URI参数值。publicStrin

6、guser2Json(FormParam(id)Stringid,FormParam(name)Stringname)System.out.println(id);System.out.println(name);returnname:+name+,age:1,id:+id+;多参数测试参数为jsonPOST/这里Path定义了类的层次路径。指定了资源类提供服务的URI路径。Path(/user3info)/Produces定义了资源类方法会生成的媒体类型Consumes(MediaType.APPLICATION_JSON)传json/多参数配置Consumes(MediaType.MULT

7、IPART_FORM_DATA,MediaType.APPLICATION_FORM_URLENCODED)Produces(MediaType.APPLICATION_JSON)返回json/PathParam向Path定义的表达式注入URI参数值。publicStringuser3Json(FormParam(id)Stringid)System.out.println(id);returnname:hanzl,age:1,id:+id+;GETPath(/age/j)Produces(MediaType.TEXT_XML)publicStringuserAge(PathParam(j)i

8、ntj)intage=intage=j;return+age+;3.配置服务端web.xml(restful接口发布地址)在web.xml中加入如下配置JerseyRESTService.sun.jersey.spi.container.servlet.ServletContainer.perty.packages.eviac.blog.restws1JerseyRESTService/rest/*4.编写客户端代码4.1新建java工程来进行服务端的第一次调用:package.eviac.blog.restclient;importjavax.ws.rs.core.MediaType;imp

9、ort.sun.jersey.api.client.Client;import.sun.jersey.api.client.ClientResponse;import.sun.jersey.api.client.WebResource;import.sun.jersey.api.client.config.ClientConfig;import.sun.jersey.api.client.config.DefaultClientConfig;/*authorpavithra*/publicclassUserInfoClientpublicstaticfinalStringBASE_URI=lo

10、calhost:8080/RestflService;publicstaticfinalStringPATH_NAME=/UserInfoService/name/;publicstaticfinalStringPATH_AGE=/UserInfoService/age/;publicstaticvoidmain(Stringargs)Stringname=Pavithra;intage=25;ClientConfigconfig=newDefaultClientConfig();Clientclient=Client.create(config);WebResourceresource=cl

11、ient.resource(BASE_URI);WebResourcenameResource=resource.path(rest).path(PATH_NAME+name);System.out.println(ClientResponsen+getClientResponse(nameResource);System.out.println(Responsen+getResponse(nameResource)+nn);WebResourceageResource=resource.path(rest).path(PATH_AGE+age);System.out.println(Clie

12、ntResponsen+getClientResponse(ageResource);System.out.println(Responsen+getResponse(ageResource);/*返回客户端请求。例如:GETlocalhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra返回请求结果状态“200OK”。*paramservicereturn*/privatestaticStringgetClientResponse(WebResourceresource)returnresource.accept(MediaType.TE

13、XT_XML).get(ClientResponse.class).toString();/*返回请求结果XML例如:Pavithra*paramservicereturn/privatestaticStringgetResponse(WebResourceresource)returnresource.accept(MediaType.TEXT_XML).get(String.class);调用结果:ClientResponseGEThttp:/localhost:BOE0/RestfiService/rest/UserlnfoService/name/Pavithrareturnedare

14、sponseResponsePavithraClientResponseGEThttp:/localhost:B0S0/RestfiService/rest/UserlnfoService/age/25returnedaresponsestatusResponse25.卡#4.2get方式还可以直接从浏览器直接调用浏览器调用:以上这些都是单纯的get方式提交的数据可使用以上这些都是单纯的get方式提交的数据可使用5.客户端调用我这有两种方式HttpURLConnectionHttpClient两不中HttpURLConnection调用restful接口代码如下:package.eviac.b

15、log.restclient;/*测试get请求方式,请求数据为单个参数,返回结果为jsonget方法提交返回数据json/importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;.HttpURLConnection;.MalformedURLException;.URL;publiccl

16、assJavaNetURLRESTFulClient/post方式publicstaticStringpostDownloadJson(Stringpath,Stringpost)URLurl=null;接口的地址path=localhost:8080/RestflService/rest/UserInfoService/userinfo;请求的参数post=id=id:11;tryurl=newURL(path);HttpURLConnectionhttpURLConnection=(HttpURLConnection)url.openConnection();httpURLConnecti

17、on.setRequestMethod(POST);/提交模式/conn.setConnectTimeout(10000);/连接超时单位毫秒/conn.setReadTimeout(2000);/读取超时单位毫秒/发送POST请求必须设置如下两行httpURLConnection.setDoOutput(true);httpURLConnection.setDoInput(true);/httpURLConnection.setRequestProperty(Content-Type,application/json;charset=utf-8);/获取URLConnection对象对应的输

18、出流PrintWriterprintWriter=newPrintWriter(httpURLConnection.getOutputStream();/发送请求参数printWriter.write(post);/post的参数xx=xx&yy=yy/Hush输出流的缓冲printWriter.flush();/开始获取数据BufferedInputStreambis=newBufferedInputStream(httpURLConnection.getInputStream();ByteArrayOutputStreambos=newByteArrayOutputStream();int

19、len;bytearr=newbyte1024;while(len=bis.read(arr)!=-1)bos.write(arr,0,len);bos.flush();bos.close();returnbos.toString(utf-8);catch(Exceptione)e.printStackTrace();returnnull;publicstaticvoidmain(Stringargs)tryStringid=123;StringtargetURL=localhost:8080/RestflService/rest/UserInfoService/userinfo/;targe

20、tURL+=id;URLrestServiceURL=newURL(targetURL);HttpURLConnectionhttpConnection=(HttpURLConnection)restServiceURL.openConnection();httpConnection.setRequestMethod(GET);/返回xml/httpConnection.setRequestProperty(Content-Type,text/plain;charset=utf-8);/返回jsonhttpConnection.setRequestProperty(Accept,applica

21、tion/json);if(httpConnection.getResponseCode()!=200)thrownewRuntimeException(HTTPGETRequestFailedwithErrorcode:+httpConnection.getResponseCode();BufferedReaderresponseBuffer=newBufferedReader(newInputStreamReader(httpConnection.getInputStream();Stringoutput;System.out.println(OutputfromServer:n);whi

22、le(output=responseBuffer.readLine()!=null)System.out.println(output);/解析jsonhttpConnection.disconnect();catch(MalformedURLExceptione)e.printStackTrace();catch(IOExceptione)e.printStackTrace();/postDownloadJson(null,null);HttpClient调用restful接口(post&get方式)代码如下:package.eviac.blog.restclient;importjava.

23、io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;mons.httpclient.HttpClient;mons.httpclient.HttpException;mons.httpclient.NameValuePair;mons.httpclient.methods.GetMethod;mons.httpclient.methods.PostMethod;publicclassRestClientpublicstaticvoidmain(

24、Stringargs)Stringurlpost=localhost:8080/RestflService/rest/UserInfoService/user3info;Stringurlget=localhost:8080/RestflService/rest/UserInfoService/name/1;HttpClientclient=newHttpClient();/POST方法GetMethodgetmethod=newGetMethod(urlget);PostMethodmethod=newPostMethod(urlpost);NameValuePairdata=newName

25、ValuePair(id,id:11);method.setRequestBody(data);tryintstatusCode=client.executeMethod(method);if(statusCode=200)/StringstrJson=method.getResponseBodyAsString();/System.out.println(post方法=+$红)$。口);BufferedReaderreader=newBufferedReader(newInputStreamReader(method.getResponseBodyAsStream();StringBuffe

26、rstringBuffer=newStringBuffer();Stringstr=;while(str=reader.readLine()!=null)stringBuffer.append(str);Stringts=stringBuffer.toString();System.out.println(post方法=由$);catch(HttpExceptione)e.printStackTrace();catch(IOExceptione)e.printStackTrace();执行get方法tryintstatusCode=client.executeMethod(getmethod)

27、;if(statusCode=200)StringstrJson=getmethod.getResponseBodyAsString();System.out.println(get方法=+$红)$。口);/System.out.println(map.get(user).getUsername();catch(HttpExceptione)e.printStackTrace();catch(IOExceptione)e.printStackTrace();HttpURLConnection调用restful接口(post,多参数)服务端方法配置:/多参数测试POST/这里Path定义了类的层

28、次路径。指定了资源类提供服务的URI路径。Path(/user2info)/Produces定义了资源类方法会生成的媒体类型Consumes(MediaType.APPLICATION_JSON)/传json/多参数配置Consumes(MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_FORM_URLENCODED)Produces(MediaType.APPLICATION_JSO1)/返回上$。/PathParam向Path定义的表达式注入URI参数值。publicStringuser2Json(FormParam(id)String

29、id,FormParam(name)Stringname)System.out.println(id);System.out.println(name);returnname:+name+,age:1,id:+id+;客户端调用:代码package.eviac.blog.restclient;importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStreamRea

30、der;importjava.io.PrintWriter;.HttpURLConnection;.MalformedURLException;.URL;/*authorHanlong多参数配置请求数据为为多个参数返回结果是Json放在body体里Post方法提交/publicclassTest2paraspost方式publicstaticStringpostDownloadJson(Stringpath,Stringpost)URLurl=null;path=localhost:8080/RestflService/rest/UserInfoService/user2info;post=i

31、d:11;Stringpost1=id=1&name=hanzl;tryurl=newURL(path);HttpURLConnectionhttpURLConnection=(HttpURLConnection)url.openConnection();httpURLConnection.setRequestMethod(POST);/提交模式/conn.setConnectTimeout(10000);/连接超时单位毫秒/conn.setReadTimeout(2000);/读取超时单位毫秒/发送POST请求必须设置如下两行httpURLConnection.setDoOutput(tru

32、e);httpURLConnection.setDoInput(true);/httpURLConnection.setRequestProperty(Content-Type,application/json;charset=utf-8);/获取URLConnection对象对应的输出流PrintWriterprintWriter=newPrintWriter(httpURLConnection.getOutputStream();/发送请求参数printWriter.write(post1);/post的参数xx=xx&yy=yy/flush输出流的缓冲printWriter.flush(

33、);/开始获取数据BufferedInputStreambis=newBufferedInputStream(httpURLConnection.getInputStream();ByteArrayOutputStreambos=newByteArrayOutputStream();intlen;bytearr=newbyte1024;while(len=bis.read(arr)!=-1)bos.write(arr,0,len);bos.flush();bos.close();returnbos.toString(utf-8);catch(Exceptione)e.printStackTra

34、ce();returnnull;publicstaticvoidmain(Stringargs)System.out.println(postDownloadJson(null,null);5.4HttpURLConnection调用restful接口(post,参数为json,返回参数为json)服务端多参数测试参数为jsonPOST/这里Path定义了类的层次路径。指定了资源类提供服务的URI路径。Path(/user3info)/Produces定义了资源类方法会生成的媒体类型Consumes(MediaType.APPLICATION_JSON)/传json/多参数配置Consumes

35、(MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_FORM_URLENCODED)Produces(MediaType.APPLICATION_JSON返回飞。/PathParam向Path定义的表达式注入URI参数值。publicStringuser3Json(FormParam(id)Stringid)System.out.println(id);returnname:hanzl,age:1,id:+id+;客户端代码package.eviac.blog.restclient;importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;.HttpURLConnection;.MalformedURLException;.URL;/*authorHanlong多参数配置请求数据json返回结果是JsonP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论