Rest服务的创建和调用 您所在的位置:网站首页 rest服务调用 Rest服务的创建和调用

Rest服务的创建和调用

2023-05-26 00:15| 来源: 网络整理| 查看: 265

  在公司完成了一个简单的rest服务的搭建和调用

1.项目需求 创建一个java工程。 编写一个rest服务,要求入参为json字符串,服务可以解析报文并能实现逻辑对比,最后能够根据对比结果返回正常和异常的情况。 通过postman/soapUI工具调用rest服务并进行测试。

        标准如下:

       

1 入参: 2 3 { 4 5 "root":{ 6 7 "loginNo":"noteId" 8 9 }, 10 11 "body":{ 12 13 "busiInfo"{ 14 15 "custId":"noteId", 16 17 "custName":"custName", 18 19 } 20 21 } 22 23 } 24 25 出参: 26 27 { 28 29 "rtnCode":"000000", 30 31 "rtnMsg":"成功" 32 33 } 34 35 注:异常返回 rtnCode=-9999,rtnMsg="程序错误"。 2.具体流程 1.环境的配置

1.创建java动态Web项目或者Maven的Web工程

2.首先需要搭建rest服务,需要一些相应的jar包jersey及相关的依赖如下图:

 接下来需要配置web.xml配置文件

 

UserInfoServlet com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages com.sitech.rest 1 UserInfoServlet /rest/* index.jsp

注:搭建rest服务需要使用相应的注解,常用的注解及作用如下:

@javax.ws.rs.ApplicationPath 标识应用路径,用于由@Path提供的所有资源uri的基本uri。当发布在一个servlet容器中,它的值可以使用web.xml中的servlet-mapping进行重写。

@javax.ws.rs.Path 标识要请求的资源类或类方法的uri路径。

@javax.ws.rs.PathParam 将uri中指定的路径参数绑定到资源方法参数,资源类的字段,或资源类的bean属性。

@javax.ws.rs.QueryParam 将http请求的Query参数绑定到资源方法参数,资源类的字段,或资源类的bean属性。

@javax.ws.rs.MatrixParam 将uri矩阵参数的值绑定到资源方法参数,资源类的字段,或资源类的bean属性。

3.本次项目业务逻辑是要解析json报文,所以需要解析json报文的相关jar包及依赖,如下图

 

4.配置好环境后则需编写代码实现功能,具体代码实现如下 1 package com.sitech.rest; 2 3 import javax.servlet.http.HttpServletResponse; 4 import javax.ws.rs.GET; 5 import javax.ws.rs.POST; 6 import javax.ws.rs.Path; 7 import javax.ws.rs.Produces; 8 import javax.ws.rs.QueryParam; 9 import javax.ws.rs.core.Context; 10 import javax.ws.rs.core.MediaType; 11 12 import net.sf.json.JSON; 13 import net.sf.json.JSONObject; 14 15 /************************* 16 * @className RestService.java 17 * @author zyl 18 * @date 2019年1月3日上午8:48:43 19 * @version 1.0.1 20 * @describe 创建一个rest服务,可以解析json对象,分别使用了GET和 21 Post两种方式进行参数的传递 22 ***********************/ 23 24 @Path("jsonChange") 25 public class RestService { 26 27 JSONObject ingredients = new JSONObject(); 28 29 @Context 30 HttpServletResponse response; 31 32 @GET 33 @Produces(MediaType.TEXT_PLAIN) 34 public String getResult(@QueryParam("message") String message) throws Exception { 35 36 response.setCharacterEncoding("UTF-8"); 37 try { 38 JSONObject jsonObj = JSONObject.fromObject(message); 39 40 // 解析root 41 String root = jsonObj.getString("root"); 42 String loginNo = JSONObject.fromObject(root).getString("loginNo"); 43 44 // 解析body 45 String body = jsonObj.getString("body"); 46 String busiInfo = JSONObject.fromObject(body).getString("busiInfo"); 47 String custId = JSONObject.fromObject(busiInfo).getString("custId"); 48 String custName = JSONObject.fromObject(busiInfo).getString("custName"); 49 50 if ("noteId".equalsIgnoreCase(loginNo) && "noteId".equalsIgnoreCase(custId) 51 && "custName".equalsIgnoreCase(custName)) { 52 ingredients.put("rtnCode", "000000"); 53 ingredients.put("rtnMsg", "成功"); 54 System.out.println("成功"); 55 } else { 56 ingredients.put("rtnCode", "-9999"); 57 ingredients.put("rtnMsg", "程序出错"); 58 System.out.println("错误"); 59 } 60 61 return ingredients.toString(); 62 } catch (Exception e) { 63 64 e.printStackTrace(); 65 ingredients.put("rtnCode", "-9999"); 66 ingredients.put("rtnMsg", "程序错误"); 67 /* 68 * response.setContentType("text/html;"); 69 * response.getWriter().write("json报文格式不正确,出现异常!!!");; 70 */ 71 return ingredients.toString(); 72 } 73 } 74 75 @POST 76 @Produces(MediaType.TEXT_PLAIN) 77 public String postResult(String userInfo) { 78 79 try { 80 81 if ("".equals(userInfo)) { 82 throw new Exception("报文为空异常!!!"); 83 } 84 JSONObject jsonObj = JSONObject.fromObject(userInfo); 85 86 // 解析root 87 String root = jsonObj.getString("root"); 88 String loginNo = JSONObject.fromObject(root).getString("loginNo"); 89 System.out.println("loginNo:" + loginNo); 90 91 // 解析body 92 String body = jsonObj.getString("body"); 93 System.out.println("body" + body); 94 String busiInfo = JSONObject.fromObject(body).getString("busiInfo"); 95 System.out.println("busiInfo" + busiInfo); 96 String custId = JSONObject.fromObject(busiInfo).getString("custId"); 97 System.out.println("custId:" + custId); 98 String custName = JSONObject.fromObject(busiInfo).getString("custName"); 99 System.out.println("custName:" + custName); 100 101 if ("zhuyl".equalsIgnoreCase(loginNo) && "zhuyl".equalsIgnoreCase(custId) 102 && "zhuyinlong".equalsIgnoreCase(custName)) { 103 ingredients.put("rtnCode", "000000"); 104 ingredients.put("rtnMsg", "正确的"); 105 } else { 106 ingredients.put("rtnCode", "-9999"); 107 ingredients.put("rtnMsg", "错误的报文"); 108 throw new Exception("参数不正确"); 109 } 110 return ingredients.toString(); 111 } catch (Exception e) { 112 e.printStackTrace(); 113 ingredients.put("rtnCode", "-9999"); 114 ingredients.put("rtnMsg", "错误的报文"); 115 return ingredients.toString(); 116 } 117 } 118 }  5.使用SoapUI工具进行测试

运行该Web项目,将url复制下来,打开SoapUI工具进行测试:project--选择New REST Project,可以给工程起一个名字。选择路径:在新建的Project中选择New REST Service from URI,填写IP地址和端口号,填写路径、选择方法、提交参数,Resource中填写具体路径,在method处选择实现方式(get/put/post),需要提交参数的可以在左边直接添加参数名称和参数值。点击三角号即可运行测试用例,并能看到返回结果。

注意:在使用SoapUI时返回的参数中文出现乱码。解决: 在Request的Encoding位置下拉选择UTF-8编码格式,再注意在以json格式填写参数的时候,必须使用UTF-8编码格式。

正确报文的情况:

参数不正确的情况:

 

自定义的异常,控制台会捕捉到异常:

输入格式不正确的json报文控制台也会捕捉到异常,显示json解析错误

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有