温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - CRUD Repository findById() different return value
crud java spring

java - CRUD存储库中的findById()不同的返回值

发布于 2020-04-27 09:32:30

在我的SpringBoot应用程序中,我正在使用CrudRepo。我发现返回值有问题:必需!=找到

GitHub:https : //github.com/einhar/WebTaskManager/tree/findById-problem

无论将方法返回类型从“任务”更改为“对象”->“ IDE都停止显示错误”,但由于稍后验证数据类型而可能会出现问题。

你知道怎么解决吗?有什么提示吗?

CrudRepo

public interface TaskRepository extends CrudRepository<Task, Integer> {}

服务

@Service
@Transactional
public class TaskService {

    @Autowired
    private final TaskRepository taskRepository;

    public TaskService(TaskRepository taskRepository) {
        this.taskRepository = taskRepository;
    }

    public List<Task> findAll() {
        List<Task> tasks = new ArrayList<>();
        for (Task task : taskRepository.findAll()) {
                tasks.add(task);
        }
        return tasks; // Work properly :)
    }
    /* ... */
    public Task findTask(Integer id) {
        return taskRepository.findById(id); // Find:Task | Required: java.util.Optional :(
    }
}

查看更多

提问者
ehr
被浏览
35
buddha 2018-04-22 23:48

findById方法是可选的return,因此您可以通过get()方法获取任务。您可以选择以下3种情况:未找到任务时会出现异常:

public Task findTask(Integer id) {
    return taskRepository.findById(id).get();
}

当找不到Task时,您将得到null:

public Task findTask(Integer id) {
    return taskRepository.findById(id).orElse(null);
}

找不到任务时,您将获得一个空的新任务:

public Task findTask(Integer id) {
    return taskRepository.findById(id).orElse(new Task());
}

或者只是返回Optional对象

public Optional<Task> findTask(Integer id) {
    return taskRepository.findById(id);
}