当前位置: 首页 > 知识库问答 >
问题:

Java发送异常与可完成的未来

公孙成仁
2023-03-14

如果一个字段在可完成的未来代码中为空,我必须发送一个异常:

 public CompletableFuture<ChildDTO> findChild(@NotEmpty String id) {
            return ChildRepository.findAsyncById(id)
                    .thenApply(optionalChild -> optionalChild
                            .map(Child -> ObjectMapperUtils.map(Child, ChildDTO.class))
                            .orElseThrow(CurrentDataNotFoundException::new));
 }

这个想法是,如果孩子的字段为空(在本例中为lastName),我必须抛出一个自定义异常,我不太确定如何实现这一点。

我的想法是使用thenAccept方法发送异常,如下所示:

public CompletableFuture<ChildDTO> findChild(@NotEmpty String id) {
                return ChildRepository.findAsyncById(id)
                        .thenApply(optionalChild -> optionalChild
                                .map(Child -> ObjectMapperUtils.map(Child, ChildDTO.class))
                                .orElseThrow(CurrentDataNotFoundException::new))
     }.thenAccept{
            ........................

     }

   ObjectMapperUtils Code: 

   public static <S, D> D map(final S entityToMap, Class<D> expectedClass) {
        return modelMapper.map(entityToMap, expectedClass);
    }


public class ChildDTO {
    @NotEmpty
    private String id;
    @PassengerIdConstraint
    private String ownerId;
    @NotEmpty
    private String firstName;
    @NotEmpty
    private String lastName;
    private String nickName;
    @ChildAgeConstraint
    private Integer age;
    @NotNull
    private Gender gender;
    @NotEmpty
    private String language;

我必须评估数据库中的lastName是否为空,我必须抛出一个异常。

有什么想法吗?

共有1个答案

段干弘毅
2023-03-14

我下面的方法是假设findAsyncById方法返回CompletableFuture

public CompletableFuture<ChildDTO> findChild(@NotEmpty String id) {
            return ChildRepository.findAsyncById(id)
                    .thenApply(optionalChild -> optionalChild
                            .map(Child -> ObjectMapperUtils.map(Child, ChildDTO.class))
                             // If child last name is empty then return empty optional
                            .filter(child->!child.getLastName())   
                             // If optional is empty then throw exception
                            .orElseThrow(CurrentDataNotFoundException::new))

 类似资料:
  • 我试图理解使用PowerMockito模拟静态方法进行测试的基础知识,因为我对这方面还不熟悉。我被卡住了,因为如果我使用下面提到的测试饮料,会出现非常不寻常的情况。java我得到未完成的stubging异常。 但当我换乘多伦时。。当。。然后返回异常消失。 TestDrink.java 这就是我想嘲弄的班级。 可乐JAVA 例外 如果可能,请尽量给出解释清楚的答案。

  • 我正在开发一个微服务应用程序,在服务布局中,我想使用可完成的未来.runAsync()调用。问题是当我想抛出异常时,我有自己的处理程序异常,但是当它在 CompletedFuture 中的捕获块中生成时,我无法捕获错误,如下所示: 控制器: 服务: 客户: 错误处理程序: 我不可能使用正确的形式。知道如何在supplyAsync块中抛出异常吗?

  • 问题内容: 当我编译下面的代码时,出现以下错误: 代码: 我已经宣布要抛出它。我想念什么? 完整代码在https://github.com/spakai/composite_indexes中 问题答案: 从Java 8开始,检查异常比Java承诺的要早得多,并且不能与它们很好地配合使用。从技术上讲,BiFunction不会声明抛出任何检查异常。因此,您传递给的,也不能将其抛出。 请通过继承选中。还

  • 我要做的是异步计算树结构的深度,我将有树的第一层,我想启动一个异步线程来分别计算每个节点的深度。 在计算过程中,树中显然可能有一个分叉,在这一点上,我想踢一个额外的线程来计算那个分支。 我已经得到了这个工作,但我需要做一些整理逻辑,当所有这些未来完成。但我对这一过程中产生的额外的可完成的未来感到困扰。 我会用什么方法来保存所有开始的CompletableFutures+那些动态创建的,并且在执行任

  • 当我编译下面的代码时,我得到以下错误: 代码: 我已经宣布它被扔掉了。我错过了什么? 完整的代码在https://github.com/spakai/composite_indexes

  • 我经历了这个问题,也经历了这个问题。但他们都没有帮助。有人能让我知道我做错了什么吗?