springboot-activiti(5.22.0) 集成 (不全版本)(二)

包导入完成  springboot app 主函数启动之后 (先不写controller   先测试 app 是否能启动  因为 数据库得url 后面如果不配置什么参数会整一堆问题例如  java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized

所以先保证启动)

activiti 文件目录 (你自己创建目录也可以,需要了解 java 读取文件和文件相对路径理解很好能自己找到就好 反正我找不到)springboot 不写配置文件默认静态文件在 static 里面应该

文件路径

启动成功后创建一个controller  创建一个请求



import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

@Controller
@RequestMapping("/index")
public class IndexController {
	@Autowired
    RepositoryService repositoryService;
    @Autowired
    ObjectMapper objectMapper;

	
	@RequestMapping("/modeler")
	public void sendRedirectModeler(HttpServletRequest request, HttpServletResponse response) throws IOException {
//以下部分代码均为写死  
        //初始化一个空模型
        Model model = repositoryService.newModel();

        //设置一些默认信息
        String name = "new-process";
        String description = "";
        int revision = 1;
        String key = "process";

        ObjectNode modelNode = objectMapper.createObjectNode();
        modelNode.put(ModelDataJsonConstants.MODEL_NAME, name);
        modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
        modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);

        model.setName(name);
        model.setKey(key);
        model.setMetaInfo(modelNode.toString());

        repositoryService.saveModel(model);
        String id = model.getId();

        //完善ModelEditorSource
        ObjectNode editorNode = objectMapper.createObjectNode();
        editorNode.put("id", "canvas");
        editorNode.put("resourceId", "canvas");
        ObjectNode stencilSetNode = objectMapper.createObjectNode();
        stencilSetNode.put("namespace",
                "http://b3mn.org/stencilset/bpmn2.0#");
        editorNode.put("stencilset", stencilSetNode);
        repositoryService.addModelEditorSource(id,editorNode.toString().getBytes("utf-8"));
//下面得id 一定不要瞎改
		response.sendRedirect(request.getContextPath() + "/activiti/modeler.html?modelId="+id);
	}

 在浏览器打开f12   现在直接请求  接口  ip:port/index/modeler

如果出现一下界面并且是这个json 错误(activiti/activitiService/model/5001/json  404) 整明成功5001是跟请求对应得不一定5001 可能别的数字

在ide 中搜索 activitiService  可以找到一个  editor-app/app-cfg.js 文件夹   activiti这个大路径我不知道在哪改 这个activitiService 可以更改 或者 直接不更改写一个 controller 就是activiti/activitiService/model/{modelId}/json   请求 

又是啥都不用改得代码


import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.InputStream;

import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Tijs Rademakers
 */
@RestController
@RequestMapping("/activiti/activitiService")
public class ModelEditorJsonRestResource implements ModelDataJsonConstants {
  
  protected static final Logger LOGGER = LoggerFactory.getLogger(ModelEditorJsonRestResource.class);
  
  @Autowired
  private RepositoryService repositoryService;
  
  @Autowired
  private ObjectMapper objectMapper;
  
  @RequestMapping(value="/model/{modelId}/json", method = RequestMethod.GET, produces = "application/json")
  public ObjectNode getEditorJson(@PathVariable String modelId) {
    ObjectNode modelNode = null;
    
    Model model = repositoryService.getModel(modelId);
      
    if (model != null) {
      try {
        if (StringUtils.isNotEmpty(model.getMetaInfo())) {
          modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
        } else {
          modelNode = objectMapper.createObjectNode();
          modelNode.put(MODEL_NAME, model.getName());
        }
        modelNode.put(MODEL_ID, model.getId());
        ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(
            new String(repositoryService.getModelEditorSource(model.getId()), "utf-8"));
        modelNode.put("model", editorJsonNode);
        
      } catch (Exception e) {
        LOGGER.error("Error creating model JSON", e);
        throw new ActivitiException("Error creating model JSON", e);
      }
    }
    return modelNode;
  }

再次请求发现
prototype-1.5.1.js:1045 GET http://localhost:8800/activiti/activitiService/editor/stencilset?version=1605667479842 404
angular.min.js:85 Loading stencil set http://b3mn.org/stencilset/bpmn2.0%23 failed.

这个请求路径 就是刚才得请求  错误总要一个一个解决 下面得什么乱七八糟 failed 先放着

在上面那个代码  那个ModelEditorJsonRestResource  类下添加一个方法  又是写死得方法 

  @RequestMapping(value="/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
  public @ResponseBody
  String getStencilset() {
//stencilset.json 读取这个文件需要 自己心思文件路径  如果跟我得路径一样这么写事不会报空指针异常
	 InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("static/activiti/stencilset.json");
    try {
      return IOUtils.toString(stencilsetStream, "utf-8");
    } catch (Exception e) {
      throw new ActivitiException("Error while loading stencil set", e);
    }
  }

添加完再次请求 编辑页面得资源 已经能全部加载 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值