gpt4 book ai didi

java - 在 spring boot 应用程序的服务层中正确使用 Optionals

转载 作者:行者123 更新时间:2023-12-05 05:41:57 25 4
gpt4 key购买 nike

我是 spring boot 应用程序开发的新手。我在我的应用程序中使用服务层,但遇到了返回 Optional 的存储库方法,如下所示。

 @Override
public Questionnaire getQuestionnaireById(Long questionnaireId) {
Questionnaire returnedQuestionnaire = null;
Optional<Questionnaire> questionnaireOptional = questionnaireRepository.findById(questionnaireId);
if(questionnaireOptional.isPresent()) {
returnedQuestionnaire = questionnaireOptional.get();
}
return returnedQuestionnaire;
}

我的问题是,

  1. 我在这里是否正确使用了 Optional。并且可以在 RestController 中检查这个可选的 (isPresent()) 并且不存在异常。如下所示
public Optional<Questionnaire> getQuestionnaireById(Long questionnaireId) {
return questionnaireRepository.findById(questionnaireId);
}

最佳答案

我不会选择任何一个选项,尤其是第一个。您不想在您的域中引入空值。您的域应尽可能简单、可读且避免空检查等困惑。

您可能想通读所有选项的可选 API,但我个人会选择这样的内容:

在存储库中:

public interface TodoBoardRepository {

Optional<Questionnaire> findByQuestionnaireId(String questionnaireId);

// ...

}

在役:

@Service
@RequiredArgsConstructor // Or generate constructor if you're not using Lombok
public class QuestionnaireService {
private final QuestionnaireRepository questionnaireRepository;

// ...

public Questionnaire getQuestionnaireById(Long questionnaireId) {
Questionnaire questionnaire = questionnaireRepository.findById(questionnaireId)
.orElseThrow(() -> new QuestionaireNotFoundException(questionnaireId));
// Do whatever you want to do with the Questionnaire...
return questionnaire;
}
}

关于java - 在 spring boot 应用程序的服务层中正确使用 Optionals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72176668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com