【问题标题】:Cannot clone the data无法克隆数据
【发布时间】:2020-05-17 00:44:05
【问题描述】:

我需要将输入作为 WorkflowCloneRequestDTO 类中的唯一名称,并且所有实例都需要自己复制。我正在尝试通过已经存在的 url 发布邮递员的姓名和 id。

但是数据不是克隆的。我不明白问题出在哪里

这是控制器类:

@PostMapping("{id}/duplicate")
    @ResponseBody
    public WorkflowViewDTO duplicateWorkFlow(@PathVariable Long id, @RequestBody @Valid WorkflowCloneRequestDTO cloneRequest, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            throw new ControllerException(bindingResult, Constants.INPUT_VALIDATION_ERROR);
        }
    return workFlowService.cloneWorkflow(id, cloneRequest);
}

这个服务类:

public WorkflowViewDTO cloneWorkflow(Long id, WorkflowCloneRequestDTO workflowCloneRequestDTO) {
        Workflow workflow = workflowDAO.findById(id);
        if (workflow == null) throw new ServiceException(ErrorEnum.WORKFLOW_NOT_FOUND);
        Workflow duplicateWorkFlow = SerializationUtils.clone(workflow);
        duplicateWorkFlow.setId(null);
        //duplicateWorkFlow.setId(null);
        duplicateWorkFlow.setName(workflowCloneRequestDTO.getName());
        duplicateWorkFlow.setIsActive(true);
        duplicateWorkFlow = workflowDAO.save(duplicateWorkFlow);
        return duplicateWorkFlow.getView(WorkflowViewDTO.class);
    }

【问题讨论】:

    标签: java object clone cloning


    【解决方案1】:

    也许您应该重新考虑使用SerializationUtils.clone。这是一种复制数据的慢速方法,看起来您不需要cloneWorkflow 之外的副本。

    如果您确实需要副本,请考虑为 Workflow 创建一个复制构造函数,或使用 setter 和 getter 来提取必要的数据。

    【讨论】:

    • 我已将 SerializationUtils.clone 更改为 org.apache.commons.lang3.SerializationUtils.clone 并为我正在使用的所有类创建了 getter 和 setter。仍然无法克隆数据
    • 也许你根本不需要克隆?
    • 在尝试克隆之前确保workflowDAO.findById(id)返回一个有效的对象。
    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多