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

ehr*_*ehr 0 java spring crud

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

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

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

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

CrudRepo

public interface TaskRepository extends CrudRepository<Task, Integer> {}
Run Code Online (Sandbox Code Playgroud)

服务

@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 :(
    }
}
Run Code Online (Sandbox Code Playgroud)

bud*_*dha 7

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

public Task findTask(Integer id) {
    return taskRepository.findById(id).get();
}
Run Code Online (Sandbox Code Playgroud)

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

public Task findTask(Integer id) {
    return taskRepository.findById(id).orElse(null);
}
Run Code Online (Sandbox Code Playgroud)

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

public Task findTask(Integer id) {
    return taskRepository.findById(id).orElse(new Task());
}
Run Code Online (Sandbox Code Playgroud)

或者只是返回Optional对象

public Optional<Task> findTask(Integer id) {
    return taskRepository.findById(id);
}
Run Code Online (Sandbox Code Playgroud)