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

下载本文档

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

文档简介

Restful服务端及客户端调用实例新建web工程作为服务端?创建服务端代码前情提示:GET(SELECT):从服务器取出资源(一项或多项)。POST(CREATE):在服务器新建一个资源。PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。DELETE(DELETE):从服务器删除资源。2.服务端代码(每个方法前有注释,包括单参数,多参数,post,get方式的例子)/****@authorpavithra**///这里@Path定义了类的层次路径。//指定了资源类提供服务的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"<User>"+"<Name>"+name+"</Name>"+"</User>";}@GET//这里@Path定义了类的层次路径。指定了资源类提供服务的URI路径。@Path("/userinfo/{id}")//@Produces定义了资源类方法会生成的媒体类型//@Consumes(MediaType.APPLICATION_JSON)//传json@Produces(MediaType.APPLICATION_JSON)//@PathParam向@Path定义的表达式注入URI参数值。publicStringuserJson(@PathParam("id")Stringid){ //JSONObjectjobj=JSONObject.fromObject(id); //id=jobj.getString("id");return"{\"name\":\"hanzl\",\"age\":1,\"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参数值。publicStringuser2Json(@FormParam("id")Stringid,@FormParam("name")Stringname){return"{\"name\":"+"\""+name+"\""+",\"age\":1,\"id\":"+"\""+id+"\"}";}//多参数测试参数为json@POST//这里@Path定义了类的层次路径。指定了资源类提供服务的URI路径。@Path("/user3info")//@Produces定义了资源类方法会生成的媒体类型//@Consumes(MediaType.APPLICATION_JSON)//传json//多参数配置@Consumes({MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_FORM_URLENCODED})@Produces(MediaType.APPLICATION_JSON)//返回json//@PathParam向@Path定义的表达式注入URI参数值。publicStringuser3Json(@FormParam("id")Stringid){return"{\"name\":\"hanzl\",\"age\":1,\"id\":"+"\""+id+"\"}";}@GET@Path("/age/{j}")@Produces(MediaType.TEXT_XML)publicStringuserAge(@PathParam("j")intj){intage=j;return"<User>"+"<Age>"+age+"</Age>"+"</User>";}}3.配置服务端web.xml(restful接口发布地址)在web.xml中加入如下配置<servlet><servlet-name>JerseyRESTService</servlet-name><servlet-class></servlet-class><init-param><param-name></param-name></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>JerseyRESTService</servlet-name><url-pattern>/rest/*</url-pattern></servlet-mapping>4.编写客户端代码4.1新建java工程来进行服务端的第一次调用:/****@authorpavithra**/publicclassUserInfoClient{publicstaticfinalStringPATH_NAME="/UserInfoService/name/";publicstaticfinalStringPATH_AGE="/UserInfoService/age/";publicstaticvoidmain(String[]args){Stringname="Pavithra";intage=25;ClientConfigconfig=newDefaultClientConfig();Clientclient=Client.create(config);WebResourceresource=client.resource(BASE_URI);WebResourcenameResource=resource.path("rest").path(PATH_NAME+name);+getClientResponse(nameResource));WebResourceageResource=resource.path("rest").path(PATH_AGE+age);+getClientResponse(ageResource));}/***返回客户端请求。例如:GET*返回请求结果状态“200OK”。**@paramservice*@return*/privatestaticStringgetClientResponse(WebResourceresource){returnresource.accept(MediaType.TEXT_XML).get(ClientResponse.class).toString();}/***返回请求结果XML例如:<User><Name>Pavithra</Name></User>**@paramservice*@return*/privatestaticStringgetResponse(WebResourceresource){returnresource.accept(MediaType.TEXT_XML).get(String.class);}}调用结果:4.2get方式还可以直接从浏览器直接调用浏览器调用:以上这些都是单纯的get方式提交的数据可使用5.客户端调用我这有两种方式HttpURLConnection,HttpClient两种5.1HttpURLConnection调用restful接口代码如下:/*****测试get请求方式,请求数据为单个参数,返回结果为json*get方法提交*返回数据json*/publicclassJavaNetURLRESTFulClient{ //post方式 publicstaticStringpostDownloadJson(Stringpath,Stringpost){ URLurl=null;//接口的地址//请求的参数 post="id=\"{\"id\":\"11\"}\""; try{ url=newURL(path); HttpURLConnectionhttpURLConnection=(HttpURLConnection)url.openConnection(); httpURLConnection.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对象对应的输出流 PrintWriterprintWriter=newPrintWriter(httpURLConnection.getOutputStream()); //发送请求参数 printWriter.write(post);//post的参数xx=xx&yy=yy //flush输出流的缓冲 printWriter.flush(); //开始获取数据 BufferedInputStreambis=newBufferedInputStream(httpURLConnection.getInputStream()); ByteArrayOutputStreambos=newByteArrayOutputStream(); intlen; byte[]arr=newbyte[1024]; 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(String[]args){try{ Stringid="123"; targetURL+=id;URLrestServiceURL=newURL(targetURL);HttpURLConnectionhttpConnection=(HttpURLConnection)restServiceURL.openConnection();httpConnection.setRequestMethod("GET");//返回xml//httpConnection.setRequestProperty("Content-Type","text/plain;charset=utf-8");//返回jsonhttpConnection.setRequestProperty("Accept","application/json");if(httpConnection.getResponseCode()!=200){thrownewRuntimeException("HTTPGETRequestFailedwithErrorcode:"+httpConnection.getResponseCode());}BufferedReaderresponseBuffer=newBufferedReader(newInputStreamReader((httpConnection.getInputStream())));Stringoutput;while((output=responseBuffer.readLine())!=null){}//解析jsonhttpConnection.disconnect();}catch(MalformedURLExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}} //postDownloadJson(null,null);}5.2HttpClient调用restful接口(post&get方式)代码如下:publicclassRestClient{publicstaticvoidmain(String[]args){HttpClientclient=newHttpClient();//POST方法GetMethodgetmethod=newGetMethod(urlget);PostMethodmethod=newPostMethod(urlpost);NameValuePair[]data={newNameValuePair("id","{\"id\":\"11\"}")};method.setRequestBody(data);try{intstatusCode=client.executeMethod(method);if(statusCode==200){ //StringstrJson=method.getResponseBodyAsString();BufferedReaderreader=newBufferedReader(newInputStreamReader(method.getResponseBodyAsStream()));StringBufferstringBuffer=newStringBuffer();Stringstr="";while((str=reader.readLine())!=null){stringBuffer.append(str);}Stringts=stringBuffer.toString();}}catch(HttpExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}//执行get方法try{intstatusCode=client.executeMethod(getmethod);if(statusCode==200){StringstrJson=getmethod.getResponseBodyAsString();}}catch(HttpExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}5.3HttpURLConnection调用restful接口(post,多参数)服务端方法配置://多参数测试@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参数值。publicStringuser2Json(@FormParam("id")Stringid,@FormParam("name")Stringname){ System.out.println(id); System.out.println(name);return"{\"name\":"+"\""+name+"\""+",\"age\":1,\"id\":"+"\""+id+"\"}";}客户端调用:代码/****@authorHanlong*多参数配置*请求数据为为多个参数*返回结果是Json*放在body体里*Post方法提交*/publicclassTest2paras{ //post方式 publicstaticStringpostDownloadJson(Stringpath,Stringpost){ URLurl=null; post="{\"id\":\"11\"}\""; Stringpost1="id=1&name=hanzl"; try{ url=newURL(path); HttpURLConnectionhttpURLConnection=(HttpURLConnection)url.openConnection(); httpURLConnection.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对象对应的输出流 PrintWriterprintWriter=newPrintWriter(httpURLConnection.getOutputStream()); //发送请求参数 printWriter.write(post1);//post的参数xx=xx&yy=yy //flush输出流的缓冲 printWriter.flush(); //开始获取数据 BufferedInputStreambis=newBufferedInputStream(httpURLConnection.getInputStream()); ByteArrayOutputStreambos=newByteArrayOutputStream(); intlen; byte[]arr=newbyte[1024]; 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(String[]args){}}5.4HttpURLConnection调用restful接口(post,参数为json,返回参数为json)服务端//多参数测试参数为json@POST//这里@Path定义了类的层次路径。指定了资源类提供服务的URI路径。@Path("/user3info")//@Produces定义了资源类方法会生成的媒体类型//@Consumes(MediaType.APPLICATION_JSON)//传json//多参数配置@Consumes({MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_FORM_URLENCODED})@Produces(MediaType.APPLICATION_JSON)//返回json//@PathParam向@Path定义的表达式注入URI参数值。publicStringuser3Json(@FormParam("id")Stringid){ System.out.println(id);return"{\"name\":\"hanzl\",\"age\":1,\"id\":"+"\""+id+"\"}";}客户端代码/****@authorHanlong*多参数配置*请求数据json*返回结果是Json*Post方法提交*/publicclassTestJsonparams{ //post方式 publicstaticStringpostDownloadJson(Stringpath,Stringpost){ URLurl=null; post="id={\"id\":\"11\"}\""; Stringpost1=post; try{ url=newURL(path); HttpURLConnect

温馨提示

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

评论

0/150

提交评论