说明
在泛微 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 methods
public 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; }
}