2

接口开发-restful - 勤快的懒羊羊

 1 year ago
source link: https://www.cnblogs.com/lwl80/p/16372907.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

接口开发-restful

数据库表设计

 1 --员工表
 2 create table Employee
 3 (
 4     id  NUMBER  primary key,
 5     employeeID NUMBER not null,
 6     employeeName VARCHAR2(100) not null,
 7     employeeSex VARCHAR2(100) not null,
 8     employeeEmail VARCHAR2(100) not null,
 9     employeeDepartmentID VARCHAR2(10) not null
10 )
11 create unique index Employee_UINDEX on Employee (employeeID)  ---员工id唯一
12 
15 drop sequence Sequence_Employee_id
16 --创建一个序列
17 create  sequence Sequence_Employee_id
18     start with 1  --起始值是1000
19     increment by 1   --每次增量1
20     maxvalue 99999    --最大增量9999

实体类

 1 package com.example.demo.api.restful.entity;
 2 
 3 /**
 4  * 员工主数据
 5  *
 6  * @author liuwenlong
 7  * @create 2022-06-13 22:10:22
 8  */
 9 @SuppressWarnings("all")
10 public class Employee {
11 
12     /**
13      * 员工ID
14      */
15     private Integer employeeID;
16 
17     /**
18      * 员工姓名
19      */
20     private String employeeName;
21 
22     /**
23      * 员工性别
24      */
25     private String employeeSex;
26 
27     /**
28      * 员工邮箱
29      */
30     private String employeeEmail;
31 
32     /**
33      * 员工部门ID
34      */
35     private Integer employeeDepartmentID;
36 
37 
38     public Employee() {
39     }
40 
41     public Integer getEmployeeID() {
42         return employeeID;
43     }
44 
45     public void setEmployeeID(Integer employeeID) {
46         this.employeeID = employeeID;
47     }
48 
49     public String getEmployeeName() {
50         return employeeName;
51     }
52 
53     public void setEmployeeName(String employeeName) {
54         this.employeeName = employeeName;
55     }
56 
57     public String getEmployeeSex() {
58         return employeeSex;
59     }
60 
61     public void setEmployeeSex(String employeeSex) {
62         this.employeeSex = employeeSex;
63     }
64 
65     public String getEmployeeEmail() {
66         return employeeEmail;
67     }
68 
69     public void setEmployeeEmail(String employeeEmail) {
70         this.employeeEmail = employeeEmail;
71     }
72 
73     public Integer getEmployeeDepartmentID() {
74         return employeeDepartmentID;
75     }
76 
77     public void setEmployeeDepartmentID(Integer employeeDepartmentID) {
78         this.employeeDepartmentID = employeeDepartmentID;
79     }
80 
81     @Override
82     public String toString() {
83         return "Employee{" +
84                 "employeeID=" + employeeID +
85                 ", employeeName='" + employeeName + '\'' +
86                 ", employeeSex='" + employeeSex + '\'' +
87                 ", employeeEmail='" + employeeEmail + '\'' +
88                 ", employeeDepartmentID=" + employeeDepartmentID +
89                 '}';
90     }
91 }

控制类Controller

 1 package com.example.demo.api.restful.controller;
 2 
 3 import com.example.demo.api.restful.service.IRestfulService;
 4 import net.sf.json.JSONObject;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.web.bind.annotation.*;
 7 
 8 
 9 /**
10  * restful接口
11  *
12  * @author liuwenlong
13  * @create 2022-06-13 14:49:56
14  */
15 @RestController
16 @SuppressWarnings("all")
17 @RequestMapping(value = "/restful/api")
18 public class RestfulController {
19 
20     @Autowired
21     IRestfulService iRestfulService;
22 
23     /**
24      * 员工主数据接入接口
25      *
26      * @param body
27      * @return
28      */
29     @RequestMapping(value = "employeeMasterData", method = RequestMethod.POST)
30     public JSONObject employeeMasterData(@RequestBody JSONObject body) {
31         return iRestfulService.employeeMasterData(body);
32     }
33 }

接口(Service)

 1 package com.example.demo.api.restful.service;
 2 
 3 import net.sf.json.JSONObject;
 4 import org.springframework.web.bind.annotation.RequestBody;
 5 
 6 /**
 7  * @author liuwenlong
 8  * @create 2022-06-13 22:47:37
 9  */
10 @SuppressWarnings("all")
11 public interface IRestfulService {
12     /**
13      * 人员主数据接口接入
14      *
15      * @param body
16      * @return
17      */
18     JSONObject employeeMasterData(@RequestBody JSONObject body);
19 }

业务实现层(Impl)

  1 package com.example.demo.api.restful.service.impl;
  2 
  3 import com.example.demo.api.restful.dao.IRestfulMapper;
  4 import com.example.demo.api.restful.entity.Employee;
  5 import com.example.demo.api.entity.HEAD;
  6 import com.example.demo.api.entity.LIST;
  7 import com.example.demo.api.entity.Response;
  8 import com.example.demo.api.restful.service.IRestfulService;
  9 import net.sf.json.JSONArray;
 10 import net.sf.json.JSONObject;
 11 import org.springframework.beans.factory.annotation.Autowired;
 12 import org.springframework.stereotype.Service;
 13 
 14 import java.util.LinkedList;
 15 import java.util.List;
 16 
 17 /**
 18  * @author liuwenlong
 19  * @create 2022-06-13 22:48:52
 20  */
 21 @SuppressWarnings("all")
 22 @Service
 23 public class RestfulServiceImpl implements IRestfulService {
 24 
 25     @Autowired
 26     IRestfulMapper iRestfulMapper;
 27 
 28 
 29     /**
 30      * 人员主数据接口接入
 31      *
 32      * @param body
 33      * @return
 34      */
 35     @Override
 36     public JSONObject employeeMasterData(JSONObject body) {
 37         try {
 38             //JSONObject jsonObject = JSONObject.fromObject(body);//将json字符串转为json对象
 39             String BIZTRANSACTIONID = body.getJSONObject("HEAD").getString("BIZTRANSACTIONID");
 40             JSONArray requestList = body.getJSONArray("LIST");//得到上游请求来的LIST数组
 41             List<Employee> employeeList = new LinkedList<>();//存放得到的人员信息
 42 
 43             int successCount = 0;//多少条数据
 44             int result = 0;//成功失败标识(默认)
 45             String comments = "成功";//成功标识(默认)
 46             String errorInfo = "";//失败标识
 47             String errorCode = "";//失败代码
 48 
 49             //组装反馈HEAD
 50             HEAD responseHead = new HEAD();
 51             //组装反馈LIST
 52             List<LIST> responseLIST = new LinkedList<>();
 53 
 54             
 55             for (int i = 0; i < requestList.size(); i++) {
 56                 int employeeID = Integer.parseInt(requestList.getJSONObject(i).getString("employeeID"));
 57                 String employeeName = requestList.getJSONObject(i).getString("employeeName");
 58                 String employeeSex = requestList.getJSONObject(i).getString("employeeSex");
 59                 String employeeEmail = requestList.getJSONObject(i).getString("employeeEmail");
 60                 int employeeDepartmentID = Integer.parseInt(requestList.getJSONObject(i).getString("employeeDepartmentID"));
 61                 Employee employee = new Employee();
 62                 employee.setEmployeeID(employeeID);
 63                 employee.setEmployeeName(employeeName);
 64                 employee.setEmployeeSex(employeeSex);
 65                 employee.setEmployeeEmail(employeeEmail);
 66                 employee.setEmployeeDepartmentID(employeeDepartmentID);
 67 
 68                 LIST errorList = new LIST();
 69                 try {
 70                     int insertDBresult = iRestfulMapper.employeeMasterData(employee);//插入数据库
 71                     successCount++;
 72                     errorList.setId(employeeID);
 73                     errorList.setMessage("success");
 74                 } catch (Exception e) {
 75                     System.out.println(e.getMessage());
 76                     errorInfo = "错误详情请参考list里对应错误提示";
 77                     result = 1;
 78                     errorList.setId(employeeID);
 79                     errorList.setMessage(e.getCause().toString());
 80                 }
 81                 responseLIST.add(errorList);
 82             }
 83 
 84             if (result == 1) {
 85                 result = 1;
 86                 comments = "接收失败";
 87             }
 88 
 89             //组装反馈HEAD
 90             responseHead.setBIZTRANSACTIONID(BIZTRANSACTIONID);
 91             responseHead.setRESULT(result);
 92             responseHead.setCOMMENTS(comments);
 93             responseHead.setERRORCODE(errorCode);
 94             responseHead.setERRORINFO(errorInfo);
 95             responseHead.setSUCCESSCOUNT(successCount);
 96 
 97             //组装完整反馈信息
 98             Response responseInfo = new Response();
 99             responseInfo.setHEAD(responseHead);
100             responseInfo.setLIST(responseLIST);
101 
102             return JSONObject.fromObject(responseInfo);
103 
104         } catch (Exception e) {
105             String error = "{\"error\":\"" + e.getMessage().replace("\"", "\\\"") + "\"}";
106             return JSONObject.fromObject(error);
107         }
108     }
109 }

DAO

 1 package com.example.demo.api.restful.dao;
 2 
 3 import com.example.demo.api.restful.entity.Employee;
 4 
 5 /**
 6  * @author liuwenlong
 7  * @create 2022-06-13 22:54:11
 8  */
 9 @SuppressWarnings("all")
10 public interface IRestfulMapper {
11 
12     /**
13      * 人员主数据接口接入
14      *
15      * @param body
16      * @return
17      */
18     int employeeMasterData(Employee employee);
19 }

Mapper

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.example.demo.api.restful.dao.IRestfulMapper">
 4 
 5     <!--人员主数据接入-->
 6     <insert id="employeeMasterData" parameterType="com.example.demo.api.restful.entity.Employee">
 7      insert into Employee(id,employeeID,employeeName,employeeSex,employeeEmail,employeeDepartmentID)
 8      values(
 9               Sequence_Employee_id.NEXTVAL,
10               #{employeeID},
11               #{employeeName},
12               #{employeeSex},
13               #{employeeEmail},
14               #{employeeDepartmentID}
15          )
16       </insert>
17 </mapper>

数据库连接

1 #连接Oracle数据库
2 spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
3 spring.datasource.url=jdbc:oracle:thin:@localhost:1521/orcl
4 spring.datasource.username=system
5 spring.datasource.password=123456
6 
7 #加载Mybatis的xml 在:resources下
8 mybatis.mapper-locations=classpath*:/com/example/demo/api/restful/dao/*.xml

请求参数说明

1 接口名称:人员主数据接入接口
2 请求地址:http://localhost:8001/restful/api/employeeMasterData
3 请求方式:post
4 传输类型:application/json

请求报文示例

 1 {
 2     "HEAD": {
 3         "BIZTRANSACTIONID": "PMS_ES_001_20210304110203",
 4         "COUNT": "1",
 5         "CONSUMER": "ES",
 6         "SRVLEVEL": "1",
 7         "ACCOUNT": "",
 8         "PASSWORD": "",
 9         "TRANSID": ""
10     },
11     "LIST": [{
12             "employeeID": 10001,
13             "employeeName": "张东",
14             "employeeSex": "男",
15             "employeeEmail": "[email protected]",
16             "employeeDepartmentID": 1
17         }, {
18             "employeeID": 10002,
19             "employeeName": "肖瑾",
20             "employeeSex": "女",
21             "employeeEmail": "[email protected]",
22             "employeeDepartmentID": 2
23         }, {
24             "employeeID": 10003,
25             "employeeName": "孙凯凯",
26             "employeeSex": "男",
27             "employeeEmail": "[email protected]",
28             "employeeDepartmentID": 3
29         }
30     ]
31 }

响应报文示例

 1 响应成功报文示例:
 2 {
 3     "HEAD": {
 4         "BIZTRANSACTIONID": "PMS_ES_001_20210304110203",
 5         "COMMENTS": "成功",
 6         "ERRORCODE": "",
 7         "ERRORINFO": "",
 8         "RESULT": 0,
 9         "SUCCESSCOUNT": 3
10     },
11     "LIST": [
12         {
13             "id": 11001,
14             "message": "success"
15         },
16         {
17             "id": 11002,
18             "message": "success"
19         },
20         {
21             "id": 11003,
22             "message": "success"
23         }
24     ]
25 }
26 
27 响应失败报文样例
28 
29 {
30     "HEAD": {
31         "BIZTRANSACTIONID": "PMS_ES_001_20210304110203",
32         "COMMENTS": "接收失败",
33         "ERRORCODE": "",
34         "ERRORINFO": "错误详情请参考list里对应错误提示",
35         "RESULT": 1,
36         "SUCCESSCOUNT": 1
37     },
38     "LIST": [
39         {
40             "id": 11004,
41             "message": "success"
42         },
43         {
44             "id": 11002,
45             "message": "java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (SYSTEM.EMPLOYEE_UINDEX)\n"
46         },
47         {
48             "id": 11003,
49             "message": "java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (SYSTEM.EMPLOYEE_UINDEX)\n"
50         }
51     ]
52 }

测试

1997786-20220614004517919-971634223.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK