提交 fd198f07 authored 作者: 黄承天's avatar 黄承天

api模块

字段名调整 api调用接口补充
上级 c3cbe18c
package com.tykj.workflowcore.api.controller;
import com.tykj.workflowcore.api.entity.ClassInfo;
import com.tykj.workflowcore.api.entity.InvokeRequest;
import com.tykj.workflowcore.api.service.ApiService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
......@@ -19,8 +22,13 @@ public class ApiController {
}
@GetMapping
public ResponseEntity<List<ClassInfo>> findAll(){
public ResponseEntity<List<ClassInfo>> findAll() {
return ResponseEntity.ok(apiService.findAll());
}
@PostMapping
public void invoke(@RequestBody InvokeRequest invokeRequest) {
apiService.invoke(invokeRequest.getClassName(),invokeRequest.getName(),invokeRequest.getParams());
}
}
......@@ -12,7 +12,7 @@ import java.util.List;
@NoArgsConstructor
public class ApiInfo {
private String name;
private String className;
private List<EntityInfo> params;
......
......@@ -11,7 +11,7 @@ import java.util.List;
@NoArgsConstructor
public class ClassInfo {
private String name;
private String className;
private List<ApiInfo> apiInfos;
......
......@@ -11,7 +11,7 @@ import java.util.List;
@NoArgsConstructor
public class EntityInfo {
private String type;
private String className;
private String name;
......
package com.tykj.workflowcore.api.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class InvokeRequest {
private String className;
private String name;
private List<Parameter> params;
}
......@@ -4,13 +4,22 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Map;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Parameter {
/**
* 类名
*/
private String className;
private Object obj;
/**
* Map形式的实例对象
* key为字段名 value为字段值
*/
private Map<String,Object> instance;
}
package com.tykj.workflowcore.api.service;
import com.alibaba.fastjson.JSON;
import com.tykj.workflowcore.api.annotations.Callable;
import com.tykj.workflowcore.api.annotations.CallableApi;
import com.tykj.workflowcore.api.entity.ApiInfo;
......@@ -7,6 +8,7 @@ import com.tykj.workflowcore.api.entity.ClassInfo;
import com.tykj.workflowcore.api.entity.EntityInfo;
import com.tykj.workflowcore.api.entity.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.io.File;
......@@ -134,7 +136,7 @@ public class ApiService {
Method method = clz.getMethod(apiName, parameterTypes);
Object bean = springBeanService.getBean(clz);
Object[] params = parameters.stream()
.map(Parameter::getObj)
.map(parameter -> toBean(parameter.getInstance(), getClass(parameter.getClassName())))
.toArray();
return method.invoke(bean, params);
} catch (RuntimeException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
......@@ -193,4 +195,12 @@ public class ApiService {
}
}
}
}
/**
* 把map转成指定类型的JavaBean对象
*/
public static <T> T toBean(Map<String, Object> map, Class<T> clazz) {
return JSON.parseObject(JSON.toJSONString(map), clazz);
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论