java Отправить исключение с готовым будущим - PullRequest
1 голос
/ 23 сентября 2019

Я должен отправить исключение, если поле пусто в коде CompletableFuture:

 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 Ответ

0 голосов
/ 23 сентября 2019

Мой следующий подход заключается в предположении, что findAsyncById метод возвращает CompletableFuture<Optional<ChildDTO>>.так что вы можете использовать фильтр, чтобы проверить, является ли lastName пустым или нет, если исключение пустого броска осуществляется с помощью orElseThrow

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))
...