說明
在泛微 E9 系統開發過程中,使用 Ecode 調用后端接口并進行傳值是極為常見且關鍵的操作。在上一篇文章中,我們探討了 Ecode 調用后端代碼的相關內容,本文將深入剖析在 Ecode 中如何向后端傳值,以及后端又該如何處理接收這些值
GET請求傳參
前端傳參
這種方式是將參數直接嵌入到請求的 URL 路徑中。例如,假設我們現在要將前端的requestId傳給接口,可以參考以下代碼
getNodeReason(){var requestId = WfForm.getBaseInfo().requestid;// console.log("輸出對應的請求Id" + requestId);WeaTools.callApi(`http://IP:PORT/api/workflow/test/getRequestId?requestId=${requestId}`, 'get', {_time: Date.now()}).then((data) => {console.log(data);// 直接使用 data 數組,無需進行 JSON 解析this.setState({getRequestInfo: data}, () => {console.log(this.state.getRequestInfo);});});}
在這里需要注意的就是對應的URL需要用反引號進行標注,這樣才好將上面查到的requestId變量進行傳輸
后端如何接收參數
@GET
@Path("/getRequestId")
@Produces(MediaType.TEXT_PLAIN)
public String getRequestInfo(@QueryParam("requestId") String requestId){//輸出接收到的參數(如果沒有配置log的話,也可以通過System.out.println()來進行輸出)this.log.info("獲取接口方法getNodeReason傳遞的參數requestId"+requestId);}
在后端中非常需要注意的一點就是這個@QueryParam注解括號里面寫的名稱必須和前端傳遞的參數名稱一致才行
截圖展示:
POST請求
前端傳參
在前端使用 POST 請求時,我們需要將參數封裝在請求體中,并設置正確的請求頭
getData() {const data = {name: "John1",age: 25};fetch('http://IP:PORT/api/workflow/test/getInfo2', {//IP:PORT輸入對應的服務器地址以及對應的端口號就行method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify(data)}).then(response => response.json()).then(data => {this.setState({jsonData: data}, () => {console.log(this.state.jsonData);console.log("輸出姓名值" + this.state.xm);});}).catch(error => {console.error('請求出錯:', error);});
}
后端接收處理
需要注意的是,需要用一個實體類來接收參數;實體類中需要注明所有傳遞的內容
@Path("/workflow/test")
public class EcodeTestActionWorkflow {@POST@Path("/getInfo2")@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)public String test(UserData userData) {JSONObject json = new JSONObject();json.put("age", userData.getAge());json.put("name", userData.getName());json.put("username", "cccc");json.put("test", "test4");return json.toString();}
}
實體類如下:根據上面前端傳參確定參數是age和name;這個實體類需要包含前端傳遞的所有參數對應的變量,以及它們的getter
和setter
方法,確保后端能夠順利接收并處理這些參數。
public class UserData {private String name;private int age;// Getter and Setter methodspublic String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }}