首页 > 解决方案 > 我不知道在这些位置的 else 句中还能放什么

问题描述

我可以在此方法中在没有错误或异常的情况下在 else 语句中编写什么
此代码使用 java 编写并使用 mongo db 我想从 workOrder 添加对象并检查是否为 null 并且我想检查 id 是否为 null 但如果 workOrder或者 id 为 null 我不知道我可以返回什么

    public TaskDataDTO save(TaskDataDTO taskDataDTO,String WorkOrderId) {
            if(WorkOrderId!=null) {
                taskDataDTO.setWorkOrderId(WorkOrderId);
                Optional<WorkOrderDTO> workOrderDTO=workOrderRepository.findById(WorkOrderId).map(workOrderMapper::toDto);
                if(workOrderDTO!=null)
                {
                    log.debug("Request to save TaskData : {}", taskDataDTO);
                    taskDataDTO.setWorkOrderDTO(workOrderDTO);
                    TaskData taskData = taskDataMapper.toEntity(taskDataDTO);
                    taskData = taskDataRepository.save(taskData);
                    return taskDataMapper.toDto(taskData);
                }
                else {
                    //what can i write here
                    
                }
                

            }
            else{
                //what can i write here
            }

}

标签: javaspringspring-bootspring-mvcspring-data-jpa

解决方案


Spring DataCrudRepository永远不会nullfindById(ID). 您将始终得到一个Optional包含具有匹配 ID 的实体或为空的实体。我会workOrderDTO != null完全取消支票。

如果您的save方法需要一个非 null WorkOrderId,我会在方法的开头断言它。例如,您可以使用java.util.Objects.requireNonNull(WorkOrderId)

这两个更改简化了您的代码,因为现在没有分支。它看起来像这样:

public TaskDataDTO save(TaskDataDTO taskDataDTO,String WorkOrderId) {
    Objects.requireNonNull(WorkOrderId);
    taskDataDTO.setWorkOrderId(WorkOrderId);
    Optional<WorkOrderDTO> workOrderDTO=workOrderRepository.findById(WorkOrderId).map(workOrderMapper::toDto);
    log.debug("Request to save TaskData : {}", taskDataDTO);
    taskDataDTO.setWorkOrderDTO(workOrderDTO);
    TaskData taskData = taskDataMapper.toEntity(taskDataDTO);
    taskData = taskDataRepository.save(taskData);
    return taskDataMapper.toDto(taskData);
} 

这假设您可以taskDataDTO处理Optional. workOrderDTO如果不能,您可能需要ifPresent()检查。您可能还需要考虑传递WorkOrderDTOTaskDataDTO而不是Optional<WorkOrderDTO>.


推荐阅读